今天修改代码时,碰到一个问题,一段很简单的if语句块 就是编译报错!
下面是代码:
%% test2(L)->
%%
%% if string:len(L)>4 ->"222";
%%
%% true ->"111"
%%
%% end.此时,报错:illegal guard expression。
why??
我又试了其他几种类似的写法:
test1(L)->
A = string:len(L),
if A>4 ->"222";
true ->"111"
end.
test3(L)->
if length(L)>4 ->"222";
true ->"111"
end.
test4(L)->
case string:len(L)>4 of
true ->"111";
_->"222"
end.又重新翻开书看了看
写着:关卡不能调用用户定义的函数,因为要确保它们没有副作用并能正常结束。
只能调用关卡判断函数和bif内置函数。
注意:上面关卡可能翻译不准确,这是第二版翻译的,第一版称为断言(guard)。多数erlang程序员应该认为是guard,断言应该还算准确。
本文探讨了Erlang中Guard表达式的使用规范及常见错误。通过几个示例展示了合法与非法Guard表达式的区别,并解释了为什么某些特定写法会触发编译错误。对于希望深入了解Erlang语言特性的开发者来说,这是一篇实用的文章。
1038

被折叠的 条评论
为什么被折叠?



