2016-08-25 2 views

答えて

26

ありorのための直接の構文は、パターンの途中でませんが、あなたはガードを使用することができます。

case testvalue do 
    n when n in [200, 400] -> 
    true 
    _ -> 
    false 
end 

ガードにはorを使用することもできます。これは、あまりにも動作しますが、より冗長であるだろう。

case testvalue do 
    n when n == 200 or n == 400 -> 
    true 
    _ -> 
    false 
end 

docsで述べたようにガード内部inは、比較+ orに変換されて、どちらも同じように高速に実行されます。

1

この特定のケースでは、次のような結果を返すのが最も効果的でしょうか?例えば

testvalue in [200, 400] 

:意図したとおりに

def test_my_value(testvalue), do: testvalue in [200, 400] 

それはtrueまたはfalseと評価されます。

別の可能性は、condを使用することです:あなたのコードベースが成長したときに

cond do 
    testvalue in [200, 400] -> 
    true 
    true -> 
    false 
end 
+0

' cond'になります - > trueまたはfalseを返す条件が必要なので、実際には機能しません。最後の条件を書いた方法は常に一致するため、結果は常に偽になります。 –

+2

この場合、構文は少し混乱しますが、 'true - >'は基本的に "else"節に相当します。 http://elixir-lang.org/getting-started/case-cond-and-if.html#condを参照してください。上記のコードは、必要に応じて 'true'または' false'を返します。 –

4

私の経験から、それが機能/パターンマッチングでケースを処理するためにelixirでより理にかなって、それはより読みやすいです。

私はそのようなことだろう。

defp valid_http_response?(200), do: true 
defp valid_http_response?(400), do: true 
defp valid_http_response?(_), do: false 

を、私はそれが本当に今、意味がない同意するが、将来的には `真と幸せ:)

関連する問題