2015-10-18 29 views

回答

13

您可以在警衛中使用的功能類型非常有限。

http://elixir-lang.org/getting-started/case-cond-and-if.html

的範圍是一個結構它們的地圖,這樣你就可以使用is_map 功能。

iex(1)> foo = 1..3 
1..3 
iex(2)> is_map(foo) 
true 

的範圍是地圖,看起來像%{ __struct__: Range, first: 1, last: 3}

然而,有一種更好的方式來完成你想要通過函數參數,而不是後衛使用模式匹配 。

def fun(%Range{} = range) do 
    Map.from_struct(range) 
end 

這將只匹配一個範圍結構,而不是任何地圖。

0

要測試值是否爲範圍的成員,您可以使用in

def is_high?(number) when number in 50..100 do true end

這也適用於在列表 def is_a_great_number?(number) when number in [5,7,11] do true end

我意識到這不是你的問題檢查元素的會員,但是這就是我一直在尋找,當我發現這個問題的答案。