0

我正在学习一些非常基础的教程,因为我刚从网络背景开始使用 Erlang。我有以下基于此论坛帖子的文件:

-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 绑定到用户输入吗?

4

1 回答 1

2

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

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

变量的一个陷阱,特别是在使用 shell 时,是它们是单赋值的。如果你X=calc:test().在 shell 中运行了两次,但是输入了不同的数据,第二次你会得到一个错误!f(X).在shell中使用可以X再次解除绑定。

于 2013-08-11T19:30:15.337 回答