2016-07-26 122 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