1

我有以下声明

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

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

  1. 检查“代理”对象是否定义为开头
  2. 检查“代理”对象是否不为空(但另有定义)

Rubocop 说“检测到无法访问的代码”,但是当我读到它时,可以定义对象“代理”但为空,这意味着将评估 if 语句的第二部分。

代码是如何无法访问的?

4

1 回答 1

1

根据我们在聊天中的讨论进行编辑

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

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

你可以这样写

if proxy.nil? || proxy.blank?
  # ...
end
于 2014-06-24T05:13:28.720 回答