没有参数的`<<`(双小于)是什么意思?

What does the `<<` (double less than) mean without an argument?

我在一个我想在 formtastic Gem 中覆盖的方法中找到了这个。该方法如下所示:

def to_html
  input_wrapping do
    hidden_field_html <<
    label_with_nested_checkbox
  end
end

第三行的<<是做什么的?我知道它对数组有什么作用,但在这里我不知道。

您可以这样阅读:

hidden_field_html << label_with_nested_checkbox

label_with_nested_checkbox 是连接到 hidden_field_html 末尾的参数 - 他们将其分成两行 'clarity'

  1. 在class继承中使用了<,而不是<<,前者一般与方法<<无关。

  2. Ruby 对 space 缩进有很高的容忍度;几乎所有地方都可以在函数调用和参数之间放置任意数量的 space,包括换行符。

E. g.:

'aaa'.
  length
#⇒ 3

'aaa'
  .length
#⇒ 3

两者都完全有效。

  1. << 是通用方法,可能会在任何 class 中被覆盖。这里应该是 String#<< 方法,即 将参数附加 到字符串接收器。

一般来说,可以任意覆盖此方法class:

class A
  attr_accessor :var
  def initialize
    @var = 5
  end
  def << value
    @var += value
  end
end

a = A.new
a.var
#⇒ 5
a << 37
a.var
#⇒ 42