检查列表是否包含原子键并具有值

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 之间有细微差别。)前者对 布尔值 进行操作,后者对 truthyfalsey 进行操作。

所以可以将代码更改为

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 一个布尔值。