如何检查List中是否存在指定原子key的键值对及BadBooleanError报错处理
错误原因
- 取值逻辑错误:
options = [symbol: ?|]是Elixir的关键字列表结构,执行args = options[:symbol]后,args已经是:symbol对应的值?|(即字符|的ASCII码整数124)。后续你对整数args执行args[:symbol]取值,返回的仍然是整数124,不是你预期的布尔判断结果。 - 运算符使用不符合规范:Elixir中
and是严格布尔运算符,要求左右两侧的操作数必须是布尔值,如果你要使用「真值/假值」的弱判断逻辑,应该使用&&运算符。
修复方案
如果你要实现「先判断关键字列表中存在:symbol键,再判断对应值不是整数」的逻辑,可以使用以下两种写法:
- 严格布尔判断写法(可读性更高,明确检查键是否存在)
options = [symbol: ?|] if Keyword.has_key?(options, :symbol) and not is_integer(options[:symbol]) do # 你的业务逻辑 end
- 取值复用写法(需要多次使用
:symbol对应值时使用)
options = [symbol: ?|] symbol_val = options[:symbol] if symbol_val && not is_integer(symbol_val) do # 你的业务逻辑 end
内容的提问来源于stack exchange,提问作者hnhl
相关产品推荐
相关产品推荐

