ruby&:方法语法

时间:2011-03-09 17:15:34

标签: ruby-on-rails ruby syntax

我遇到了一个错误,我遗漏了这样的空间

@entries = [#<Entry id: 3806, approved: false, submitted: false]

@entries.any?&:submitted? => true
@entries.any? &:submitted? => false

空间如何改变行为。 Entry.submitted? =&GT;如果数组中的所有元素都为false,则第二行具有所需的行为。

1 个答案:

答案 0 :(得分:18)

问题在于&amp;也是一个优先的一元运算符。

执行此操作时:

@entries.any?&:submitted?

你实际上是这样做的:

(@entries.any?)&(:submitted?)

结果如此。由于@entries中的条目和符号:已提交?真值为真。

执行此操作时:

@entries.any? &:submitted?

你实际在做的是:

@entries.any?(&:submitted?)

这是你真正想要的。

@pilcrow开始工作的原因是他/她正在使用以下课程:

class Entry
  def submitted?
    true
  end
end

要重现结果,请使用以下类:

class Entry
  def submitted?
    false
  end
end

P.S:与@ fl00r的例子相同:

[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil?

并[1,2,零]。任何?结果是真的和:零?真值为true,因此结果是相同的,因为[1,2,nil]也包含零值,但计算结果不同。