Erlang if语句并返回true

时间:2014-01-14 23:29:34

标签: erlang erlang-shell

我想知道,erlang的if语句和返回值背后的想法(在这种情况下是true-> true)。这是我的代码段

if
 (Velocity > 40) -> io:format(" processing fast !~n") ;
 true -> true
end,

我知道Erlang不允许你拥有if而没有真正的语句选项。但即使我可以使用true-> false,但它与最终输出无关。

实际上if子句和返回值背后的想法是什么。

2 个答案:

答案 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语句,但是,如果您不包含它并且没有匹配项,则会引发错误,因为解释器无法确定表达式的返回值。

这是该语言的一个特色。