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) を持ちます。
わかる?