了解Rubocop"代码无法访问"警察

时间:2014-06-24 04:41:18

标签: ruby rubocop

我有以下声明

if !defined?(proxy) || proxy.blank?

我想要实现的是避免在nil对象上使用未定义的方法。因此我的意图是

  1. 检查"代理"对象定义为以
  2. 开头
  3. 检查"代理"对象不是空白(但以其他方式定义)
  4. Rubocop说"检测到无法访问的代码"但是,当我读到它时,对象"代理"可以定义但是为空,这意味着将评估if语句的第二部分。

    代码是如何无法访问的?

1 个答案:

答案 0 :(得分:1)

编辑基于我们的discussion in chat

defined?不是正确的方法,它将检查变量是否未定义,而不是其值。它可以说是在元级别上运行。可以将defined?关键字视为回答问题"之前在代码中的任何地方都声明了这个事情吗?"。

通常,您可以使用nil方法检查Object#nil?值。这就是问问题的方法"这个变量是空的吗?"。您的代码在任何情况下都可能声明proxy变量,这就是为什么if语句中的代码无法访问的原因:proxy 永远不会未定义。

你可以这样写

if proxy.nil? || proxy.blank?
  # ...
end