无论情况如何,是否可以对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
。当然,我可以使用帮助方法来检查nil情况,但我想知道是否有更优雅的解决方案。
答案 0 :(得分:5)
您需要的是仅在对参数执行String.downcase(str)
之前将函数参数限制为二进制。其他所有内容都应与false
明确匹配:
def matcher(str) when is_binary(str) do
String.downcase(str) == "correct"
end
def matcher(_), do: false
nil
依次 an atom 将由第二个子句匹配并处理,返回false
。请注意,此方法比is_nil(str)
的显式检查更安全,因为它会为意外事件返回false
。