我想使用is_range()
后卫。例如:
def foo(bar) when is_range(bar) do
# stuff
end
但is_range
不存在?我使用的是Elixir 1.0.5
我试过
def foo(bar) when Range.range?(bar) do
# stuff
end
但这也没有效果。
我该怎么办?
答案 0 :(得分:17)
您可以在警卫中使用的功能类型非常有限。
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}
但是,有一种更好的方法可以通过使用模式来实现您想要的效果 匹配函数args而不是守卫。
def fun(%Range{} = range) do
Map.from_struct(range)
end
这将仅匹配Range Struct,而不匹配任何地图。
答案 1 :(得分: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
我意识到这不是你的问题,但这是我在找到这个问题时所寻找的答案。