Erlang中的变量是(或可以称为)引用变量吗?

时间:2012-01-14 01:48:50

标签: erlang

所以例如

f() -> 3.
x() -> F = fun() -> f() end,
       A = f(),
       B = ?MODULE:f(),
       C = F().

在定义F哈希之后,f()的新版本代码定义如下 f()-> three已加载。 C的价值是什么。

2 个答案:

答案 0 :(得分:0)

如果你不能阅读整个答案 的更新 上下文:答案是“三”

编辑:抱歉,答案有误导性, 这是正确的答案: 由于刚刚定义了F但是没有评估函数, 因为我们在评估F之前正在进行完全合格的呼叫; 将加载新代码,值将为“三”

所以,我在erlang邮件列表中发布了这个问题,我得到了这个答案的回复

Funs始终绑定到最初加载的代码。只有名称查找受到加载AFAICT的代码的影响。 这是我们之前开发中的异常来源,因为第一次加载新代码时,F仍然有效,但是第二次加载新代码时,旧代码被清除,F现在无效。对它的任何调用都会产生异常。 我们最终将我们对lambdas的需求包含在一个带状态的模块中。不是最优雅,但让我们得到“动态的lambdas”。如果你需要的只是模块:功能,你可以使用元组而不是有趣。 此致 JW

答案 1 :(得分:-1)

在您的示例中,只有B的值为“3”。最新版本的模块仅在对模块进行外部调用时执行。这使得热代码升级为原子操作,您要么执行旧代码,要么执行新代码,而不是两者都执行。