2

私は、erlang の if ステートメントと戻り値 (この場合は true->true) の背後にある考え方について疑問に思っています。これは私のコードスニペットです

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

Erlang では、true ステートメント オプションなしで if を使用することは許可されていません。しかし、true->false を使用することもできますが、最終的な出力には関係ありません。

実際、if 句と戻り値の背後にある考え方は何ですか。

4

2 に答える 2

7

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) を持ちます。

わかる?

于 2014-01-15T01:30:36.323 に答える
0

Erlang では、すべてが値を返す式です。このステートメントは必要ありませんが、true -> true含めずに一致するものがない場合は、インタープリターが式の戻り値を決定できないため、エラーが発生します。

言語の特徴です。

于 2014-01-15T14:01:24.750 に答える