我想用is_range()
後衛。例如:Elixir is_range衛兵沒有定義?我應該使用什麼?
def foo(bar) when is_range(bar) do
# stuff
end
但是is_range
不存在?我使用的藥劑1.0.5
我試圖
def foo(bar) when Range.range?(bar) do
# stuff
end
但是這也不能工作。
我該怎麼辦?
我想用is_range()
後衛。例如:Elixir is_range衛兵沒有定義?我應該使用什麼?
def foo(bar) when is_range(bar) do
# stuff
end
但是is_range
不存在?我使用的藥劑1.0.5
我試圖
def foo(bar) when Range.range?(bar) do
# stuff
end
但是這也不能工作。
我該怎麼辦?
您可以在警衛中使用的功能類型非常有限。
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
這將只匹配一個範圍結構,而不是任何地圖。
要測試值是否爲範圍的成員,您可以使用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
我意識到這不是你的問題檢查元素的會員,但是這就是我一直在尋找,當我發現這個問題的答案。