0

我试图重构我的这段代码:

test_cases.select{ |x| x.script && x.script.versions && !x.script.versions.empty? }

并使用 andand gem。基本用法只是告诉我们我们将 andand 替换为 &&(因此得名)所以我尝试了这个:

test_cases.select{ |x| !x.andand.script.andand.script_versions.andand.empty? }

但似乎它不是整个陈述(我现在在写问题时才意识到这一点)

这是否意味着我必须分开空的?条款?是否有一个 andand 函数可以检查 not(但只有最后一个?)

4

3 回答 3

0

你总是可以做

test_cases.select{ |x| x.andand.script.andand.script_version } unless x.empty?

关于andand: 虽然我们在项目中使用它并且我通常非常喜欢它,但我发现虚假使用andand会隐藏应该正确解决的问题。像许多好的工具一样,它必须谨慎使用。

于 2011-03-29T06:44:19.527 回答
0

我实际上使用了这个子句并且它有效:

test_cases.map{ |x| x.script.andand.versions && !x.script.versions.empty? }.none?

只有一个andand调用和使用map而不是select

于 2011-03-29T06:51:01.533 回答
0

x我猜什么时候nil效果不好。问题是什么时候xnil因为...empty?也返回nil, 和!nil-> true。那么这个x选错了。我建议对布尔值进行显式检查:

 test_cases.select { |x| x.andand.script.andand.versions.andand.empty? == false }

或者最好使用没有最后一个andand的空白/当前:

 test_cases.select { |x| x.andand.script.andand.versions.present? }
 test_cases.reject { |x| x.andand.script.andand.versions.blank? }

注意:这与这里的问题无关,但我更喜欢 Ick可能超过andand,因为只有nil被视为“无效”(false我认为不应该代理的合法值)。

于 2011-03-29T07:20:07.293 回答