我想知道,erlang的if语句和返回值背后的想法(在这种情况下是true-> true)。这是我的代码段
if
(Velocity > 40) -> io:format(" processing fast !~n") ;
true -> true
end,
我知道Erlang不允许你拥有if而没有真正的语句选项。但即使我可以使用true-> false,但它与最终输出无关。
实际上if子句和返回值背后的想法是什么。
答案 0 :(得分:6)
Erlang的if是布尔表达式的简单模式匹配并返回结果。
它真的只需要匹配的东西,你根本不需要“真 - >真”的情况
例如:
if
(Velocity > 40) -> io:format(" processing fast !~n") ;
(Velocity < 40) -> io:format(" processing slow !~n") ;
(Velocity == 40) -> io:format(" processing eh !~n")
end,
没有“真实 - &gt;”案例,但也没有机会与其中一种模式不匹配。
原因是“if”也是一个表达式(就像erlang中的所有内容) 所以,你可以这样做:
X = if
(Vel > 40) -> 10;
(Vel < 40) -> 5
end,
如果Vel == 40,X的值是多少?它将是未定义的,因此erlang要求您始终匹配。
当您不想指定详尽的匹配时,常见的事情是使用true,如:
X = if
(Vel > 40) -> 10;
(Vel < 40) -> 5;
true -> 0
end,
在最后一种情况下,X总是有一个值(10,5或0)
有意义吗?
答案 1 :(得分:0)
在Erlang中,一切都是一个返回值的表达式。您不需要true -> true
语句,但是,如果您不包含它并且没有匹配项,则会引发错误,因为解释器无法确定表达式的返回值。
这是该语言的一个特色。