不绑定变量?

时间:2013-08-11 18:46:48

标签: erlang erlang-shell

我正在阅读一些非常基础的教程,因为我刚从网络背景开始使用Erlang。我有以下this forum post文件:

-module(calc).

-export([test/0]).

test() ->
  X = io:get_line('X: ').

但是,我没有得到预期的结果:

1> c(calc).
calc.erl:7: Warning: variable 'X' is unused
{ok,calc}
2> calc:test().
X: test
"test\n"
3> X.
* 1: variable 'X' is unbound

不应该X = io:get_line('X: ').将X绑定到用户输入?

1 个答案:

答案 0 :(得分:2)

X仅在test函数中可见,并且Erlang中没有全局变量。要在函数外部使用的所有值都需要返回给函数调用者。

碰巧你的test函数会返回X的值作为函数结果(赋值是表达式=>绑定值是结果,函数的最后一个表达式返回为功能结果)。 因此,在shell中,您可以X=calc:test().X绑定到结果。

变量问题,特别是在使用shell时,它们是单一赋值。如果您在shell中运行X=calc:test().两次,但键入不同的数据,则第二次会出错! 在shell中使用f(X).使X再次解除绑定。