我想知道,erlang 的 if 语句和返回值(在本例中为 true->true)背后的想法。这是我的代码片段
if
(Velocity > 40) -> io:format(" processing fast !~n") ;
true -> true
end,
我知道 Erlang 不允许您使用没有 true 语句选项的 if。但即使我可以使用 true->false 但这对最终输出无关紧要。
实际上 if 子句和返回值背后的想法是什么。
我想知道,erlang 的 if 语句和返回值(在本例中为 true->true)背后的想法。这是我的代码片段
if
(Velocity > 40) -> io:format(" processing fast !~n") ;
true -> true
end,
我知道 Erlang 不允许您使用没有 true 语句选项的 if。但即使我可以使用 true->false 但这对最终输出无关紧要。
实际上 if 子句和返回值背后的想法是什么。
Erlang 的 if 是对布尔表达式的简单模式匹配并返回结果。
它真的只需要匹配的东西,你根本不需要“true -> true”的情况
例如:
if
(Velocity > 40) -> io:format(" processing fast !~n") ;
(Velocity < 40) -> io:format(" processing slow !~n") ;
(Velocity == 40) -> io:format(" processing eh !~n")
end,
不存在“true ->”的情况,但也不可能与其中一种模式不匹配。
这样做的原因是“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)
说得通?
在 Erlang 中,一切都是返回值的表达式。您不需要该true -> true
语句,但是,如果您不包含它并且没有匹配项,则会引发错误,因为解释器无法确定表达式的返回值。
这是语言的一个特点。