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