给定一个 MapSet,如何使用模式匹配检测它是否为空?
# What goes in the question marks?
def my_func(????), do: IO.puts("This mapset is empty")
def my_func(%MapSet{}), do: IO.puts("This mapset is not empty")
my_func(MapSet.new())
如果这是一个列表,我会在
([])
上匹配它,但这不适用于 MapSets(因为类型不同)这是我尝试过的其他一些事情,但没有成功。
def myfunc([]), do: IO.puts("This only works for lists")
# This is a syntax error
# def myfunc(MapSize.new())
def myfunc(%MapSet{}), do: IO.puts("This matches every mapset")
def myfunc(a) when map_size(a), do: IO.puts("the map size is always 3")
最佳答案
你也可以考虑 the solution I provided for matching against an empty map 如下:
defmodule A do
def empty?(some_map_set = %MapSet{}) do
an_empty_map_set = MapSet.new
some_map_set
|> case do
^an_empty_map_set ->true # Application of pin operator
_ -> false
end
end
end
您可以进行如下测试:
A.empty?(MapSet.new)
和
A.empty?(MapSet.new([1]))
在该链接中,您可以看到可以相应利用的其他解决方案。
@dogbert 已经提供了一个。
另一种解决方案的工作方式如下:
defmodule A do
@empty MapSet.new
def empty?(some_map_set) when some_map_set == @empty, do: true
def empty?(%MapSet{}), do: false
end
关于elixir - 模式匹配空 MapSet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49284613/