我有以下声明
if !defined?(proxy) || proxy.blank?
我想要实现的是避免在 nil 对象上使用未定义的方法。因此,我的意图是
- 检查“代理”对象是否定义为开头
- 检查“代理”对象是否不为空(但另有定义)
Rubocop 说“检测到无法访问的代码”,但是当我读到它时,可以定义对象“代理”但为空,这意味着将评估 if 语句的第二部分。
代码是如何无法访问的?
根据我们在聊天中的讨论进行编辑:
defined?
不是正确的方法,它将检查变量是否未定义,而不是其值是什么。可以这么说,它在元级别上运行。将defined?
关键字视为回答“这个东西之前在代码中的任何地方声明过吗?”这个问题。
nil
通常,您会使用该Object#nil?
方法检查值。这就是问“这个变量是空的吗?”这个问题的方法。您的代码可能proxy
在任何情况下都声明了变量,这就是 if 语句中的代码无法访问的原因:proxy
永远不会未定义。
你可以这样写
if proxy.nil? || proxy.blank?
# ...
end