2016-07-26 94 views
5

我在一个我想在formtastic Gem中重写的方法中发现了这个。该方法是这样的:没有参数的`<<(双小于)是什么意思?

def to_html 
    input_wrapping do 
    hidden_field_html << 
    label_with_nested_checkbox 
    end 
end 

什么是<<做第三行?我知道它与阵列有什么关系,但在这里我不知道。

+0

'hidden_​​field_html'应该是一个'array'或'string'和'label_with_nested_checkbox'被添加到其中。该标准说你的代码不应该超过80列,所以可能是因为它已经写成两行。 – Deep

回答

8

你可以这样阅读:

hidden_field_html << label_with_nested_checkbox 

label_with_nested_checkbox是被串联到的hidden_field_html结束的说法 - 他们已经在两行的“清晰”

+0

第四行应该可以缩进2个空格,至少,这就是我所要做的。 –

1
  1. 在拆呢类继承有<使用,而不是<<,而前者与方法<<一般无关。

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

E.克:

'aaa'. 
    length 
#⇒ 3 

'aaa' 
    .length 
#⇒ 3 

都是完全有效的。

  1. <<是通用方法,可能会覆盖任何类。在这里它应该是String#<<方法,即位置追加参数给字符串接收器。

通常,人们可能会在任何任意类覆盖此方法:

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 
+0

所以他们使用自定义的'<<' - 方法?谢谢! :) –

+1

不,如我所说,他们应该使用'String#<<'。你可以通过检查接收器类来检查它:'puts hidden_​​field_html.class.to_s'。 – mudasobwa