2016-07-26 20 views
5

Znalazłem to wewnątrz metody, którą chcę nadpisać w formtastycznym Klejnocie. Metoda wygląda następująco:Co oznacza "<<" (podwójne mniej niż) bez kłótni?

def to_html 
    input_wrapping do 
    hidden_field_html << 
    label_with_nested_checkbox 
    end 
end 

Czego << zrobić w trzecim wierszu? Wiem, co robi z tablicami, ale tutaj nie mam pojęcia.

+0

'powinna hidden_field_html' być' array' lub 'string' a' label_with_nested_checkbox' jest dodawane do niego. Standard mówi, że twój kod nie powinien przekraczać 80 kolumn, więc może to wynikać z tego, że został napisany w dwóch wierszach. – Deep

Odpowiedz

8

Można go odczytać tak:

hidden_field_html << label_with_nested_checkbox 

label_with_nested_checkbox jest argument jest łączone na koniec hidden_field_html - oni podzielić ją na dwie linie dla „jasność”

+0

Czwarta linia powinna być prawdopodobnie wcięta co najmniej 2 spacje. –

1
  1. W do dziedziczenia klas używamy <, a nie <<, a ten pierwszy nie ma nic wspólnego z metodą << w ogóle.

  2. Ruby ma wysoki poziom tolerancji na wcięcia przestrzeni; prawie wszędzie można umieścić dowolną ilość spacji, w tym nowe linie, między wywołaniem funkcji a jej argumentem.

Np .:

'aaa'. 
    length 
#⇒ 3 

i

'aaa' 
    .length 
#⇒ 3 

są zarówno w pełni uzasadniona.

  1. << to metoda ogólna, która może zostać nadpisana w dowolnej klasie. Tutaj jest podobno metoda String#<<, która dodaje do argumentu odbiornika string.

W zasadzie, można by zastąpić ten sposób, w dowolnej klasy:

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

Więc używają swojego niestandardowego '' '' -metody? Dzięki! :) –

+1

Nie, jak już powiedziałem, podobno używają 'String # <<'. Możesz to sprawdzić, analizując klasę odbiornika: 'puts hidden_field_html.class.to_s'. – mudasobwa