2017-06-28 8 views
0

大文字小文字の区別なくnilable文字列のパターンマッチングは可能ですか?エリクシールの大文字小文字を無視した無限の文字列と一致

def matcher(str) do 
    case String.downcase(str) do 
     "correct" -> true 
     _ -> false 
    end 
end 

期待される結果:

matcher("") # false 
matcher("correct") # true 
matcher("CorrecT") # true 
matcher(nil) # false. 

上記のコードに問題がmatcher(nil)FunctionClauseErrorを引き起こすことがある

は、私はこのような何かをしたいです。原因は何もないかどうかを調べるヘルパーメソッドを使うことができますが、より洗練されたソリューションがあるかどうかは疑問でした。

答えて

5

必要なのは、引数にString.downcase(str)を実行する前に、関数の引数をバイナリに限定することです。今度falseを返し、二句で一致して処理される原子である

def matcher(str) when is_binary(str) do 
    String.downcase(str) == "correct" 
end 
def matcher(_), do: false 

nil:他のすべてが明示的にfalse foを一致させる必要があります。このアプローチは、予期しないことがあればfalseを返すので、is_nil(str)の明示的なチェックよりも安全です。

関連する問題