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
有更好的(或内置的)方式吗?更重要的是,我如何在when
条款中执行此操作?
答案 0 :(得分:13)
原来是内置的解决方案; Keyword
模块导出keyword?/1
方法:
<强> Keyword.keyword?(term) 强>
如果
true
是关键字列表,则返回term
;否则返回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
注意: 与内核中的其他is_
导出不同,keyword?
不宏 - 这意味着无法使用在守卫。