Elixir提供了一些is_
功能,可以让您检查项目是否是特定类型:
is_atom
is_binary
is_map
但是如何检查Elixir中的值是否为关键字列表?我知道在下面,关键字列表是一个2元素元组的列表,第一个元素作为原子,所以我目前的解决方法是:
defmodule KList do
def is_keyword?(list) when is_list(list) do
Enum.all? list, fn item ->
case item do
{k, _} -> is_atom(k)
_ -> false
end
end
end
def is_keyword?(_), do: false
end
Run Code Online (Sandbox Code Playgroud)
有没有更好的(或内置)方式这样做?更重要的是,我怎么能在一个when
条款中做到这一点?
She*_*yar 14
原来有是一个内置的解决方案; 该Keyword
模块导出一个keyword?/1
方法:
返回
true
ifterm
是关键字列表; 否则返回false
例:
iex> Keyword.keyword?([])
true
iex> Keyword.keyword?([a: 1]
true
iex> Keyword.keyword?([{Foo, 1}])
true
iex> Keyword.keyword?([{}])
false
iex> Keyword.keyword?([:key])
false
iex> Keyword.keyword?(%{})
false
Run Code Online (Sandbox Code Playgroud)
注意: 与is_
内核中的其他导出不同,keyword?
它不是宏 - 这意味着它不能用于防护.