nim*_*nja 2 erlang if-statement
当我尝试编译以下代码时:
score(_X) -> mysqrt = math:sqrt(_X),
if
mysqrt < 100.0 -> true;
true -> 0
end.
Run Code Online (Sandbox Code Playgroud)
编译器说:
src/leap.erl:16:此子句的守卫评估为'false'
我想我正在分配一个变量mysqrt,然后检查它的结果,这不一定要小于100.0. 显然那不是正在发生的事情.我究竟做错了什么?
leg*_*cia 10
在Erlang中,变量名以大写字母或下划线开头.在你的代码,mysqrt是不是一个变量,而是一个原子.
mysqrt = math:sqrt(_X)因此该行是一个断言,返回值math:sqrt等于这个原子,这将失败,因为该函数返回一个浮点数 - 但编译器不知道这一点.
那么你应该比较mysqrt对100.0.在Erlang中,数字总是比较小于原子,所以mysqrt < 100.0总是假的 - 这是编译器警告你的.
MySqrt相反,调用您的变量,您的代码应该工作.
(此外,惯例是仅在不使用变量时使用以下划线开头的变量名称,因为这样的名称会抑制编译器的"未使用的变量"警告.仅仅调用此函数的参数X而不是_X.)