请教一个基础问题,
erlang 参数传递时是赋值or引用?
找不到方法测试。 求教了。 答: erlang 中怎么会有引用这种说法,变量都是拷贝过去的。 问: 无法实现引用,是么? 我在写的东西要传一个大状态。 所以疑惑了一下。 答: erlang 所有的变量都只能在函数中传递,没有全局变量这一说。 你传递状态是通过改变函数参数实现的 问: 我不是很清楚当参数很大时,进行拷贝的效率如何. 能给我解惑一下么? 答 越大效率越低 另外是原子atom ,erlang 的垃圾回收机制是不回收的,除非运行结束。 问: 试想gen_server中call(_From,Status,Args)被调用时,Status就被改变了。这是不是意味着这里的Status是被引用传递进去的呢 我有阐述清楚么? 答: 不会 Status 的值 不会被函数改变 函数得到的只是一个新的参数邦定 绑定 简单的说 erlang 的参数都是拷贝方式的 广州-手 14:54:35 对,这就是内存共享。 返源 不见得多少,你的每一个函数结束就会回收当中的内存。 不存在引用 广州-手 14:53:52 没有引用的参数传递 不知会吃掉我程序的性能 上海-PHP-返源 14:54:34 如果有引用就有副作用 就没办法独自运行 广州-手 14:54:10 不知会吃掉多少性能。 但是我的status是一条很长的记录。 广州-手 ) 14:55:23 稍稍有点担忧。暂时还不能测试。 广州-手 14:56:23 你刚说的参数 愈大效率越低,是怎么回事? 上海-PHP-返源 14:57:02 记录是单独存储的 不过你传递的时候还是拷贝 广州-手 14:56:47 恩。 上海-PHP-返源 14:57:40 但这里具体内部实现有很多方案 譬如你不写,只是取,我就可以共用内存。 广州-手 14:58:03 怎么实现,求指导。 上海-PHP-返源 14:58:56 这个跟你实现没关系哈,我说的erlang 内部。 总之你减少参数的大小 有利提高速度 广州-手 14:58:57 这个意思是erlang的自动优化么? 上海-PHP-返源 14:59:40 是的 |