ruby&:方法语法

loo*_*non 4 ruby syntax ruby-on-rails

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

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

@entries.any?&:submitted? => true
@entries.any? &:submitted? => false
Run Code Online (Sandbox Code Playgroud)

空间如何改变行为.Entry.submitted?对于数组中的所有元素,=> false,第二行具有所需的行为.

Pan*_*kos 18

问题是&也是具有优先权的一元运算符.

当你这样做:

@entries.any?&:submitted?
Run Code Online (Sandbox Code Playgroud)

你实际上是这样做的:

(@entries.any?)&(:submitted?)
Run Code Online (Sandbox Code Playgroud)

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

当你这样做:

@entries.any? &:submitted?
Run Code Online (Sandbox Code Playgroud)

你实际在做的是:

@entries.any?(&:submitted?)
Run Code Online (Sandbox Code Playgroud)

这是你真正想要的.

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

class Entry
  def submitted?
    true
  end
end
Run Code Online (Sandbox Code Playgroud)

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

class Entry
  def submitted?
    false
  end
end
Run Code Online (Sandbox Code Playgroud)

PS:与@ fl00r的例子相同:

[1,2,nil].any?&:nil? and [1,2,nil].any? &:nil?
Run Code Online (Sandbox Code Playgroud)

并[1,2,零] .ANY?结果是真的和:零?具有真值,因此结果是相同的,因为[1,2,nil]也包含零值,但计算是不同的.

  • &&是比较运算符.&是一元/二元运算符.例如,自从(0011 1100&0000 1101 = 0000 1100)起60&13 = 12. (2认同)