检查列表是否包含原子键并具有值
check if list contains atom key and has a value
如何检查列表中是否存在键值对?
options = [symbol: ?|]
args = options[:symbol]
if args[:symbol] and not is_integer(args[:symbol]) do
...
这给了我错误
(BadBooleanError) expected a boolean on left-side of "and", got: 124
and/2
and &&/2
(the same applies to or/2
and ||/2
之间有细微差别。)前者对 布尔值 进行操作,后者对 truthy
和 falsey
进行操作。
所以可以将代码更改为
if args[:symbol] && not is_integer(args[:symbol]), do: ...
但这段代码仍然不正确(至少闻起来是这样。)关键字可能有 nil
作为值,因此必须清楚地区分 有 nil
值 和 没有值 。
为此我们有 Keyword.has_key?/2
。也就是说,正确的代码是:
if Keyword.has_key?(args, :symbol) and not is_integer(args[:symbol]), do: ...
注意and/2
这里;现在是正确的,因为 Keyword.has_key/2
确实 return 一个布尔值。
如何检查列表中是否存在键值对?
options = [symbol: ?|]
args = options[:symbol]
if args[:symbol] and not is_integer(args[:symbol]) do
...
这给了我错误
(BadBooleanError) expected a boolean on left-side of "and", got: 124
and/2
and &&/2
(the same applies to or/2
and ||/2
之间有细微差别。)前者对 布尔值 进行操作,后者对 truthy
和 falsey
进行操作。
所以可以将代码更改为
if args[:symbol] && not is_integer(args[:symbol]), do: ...
但这段代码仍然不正确(至少闻起来是这样。)关键字可能有 nil
作为值,因此必须清楚地区分 有 nil
值 和 没有值 。
为此我们有 Keyword.has_key?/2
。也就是说,正确的代码是:
if Keyword.has_key?(args, :symbol) and not is_integer(args[:symbol]), do: ...
注意and/2
这里;现在是正确的,因为 Keyword.has_key/2
确实 return 一个布尔值。