2016-07-26 4 views
5

Ich fand dies innerhalb einer Methode, die ich im formtastischen Edelstein überschreiben möchte. Das Verfahren sieht so aus:Was bedeutet das `<<` (doppelt kleiner als) ohne ein Argument?

def to_html 
    input_wrapping do 
    hidden_field_html << 
    label_with_nested_checkbox 
    end 
end 

Was bedeutet die << in der dritten Zeile tun? Ich weiß, was es mit Arrays macht, aber hier habe ich keine Ahnung.

+0

'hidden_field_html' sollte ein' array' oder 'string' und die' label_with_nested_checkbox' hinein wird hinzugefügt. Der Standard besagt, dass Ihr Code 80 Spalten nicht überschreiten sollte, deshalb kann es sein, dass er in zwei Zeilen geschrieben wurde. – Deep

Antwort

8

Sie es wie folgt zu lesen:

hidden_field_html << label_with_nested_checkbox 

label_with_nested_checkbox ist das Argument, auf das Ende des hidden_field_html verketteten werden - sie haben es über zwei Zeilen aufgeteilt für 'Klarheit'

+0

Die 4. Zeile sollte wohl um 2 Felder eingerückt sein, zumindest würde ich das machen. –

1
  1. In Klassenvererbung gibt es < verwendet, nicht <<, und ersteres hat nichts mit Methode << im Allgemeinen zu tun.

  2. Ruby hat eine hohe Toleranz gegenüber Platzeindrücken; Fast überall könnte man beliebig viele Leerzeichen, einschließlich Zeilenumbrüchen, zwischen Funktionsaufruf und Argument setzen.

E. g .:

'aaa'. 
    length 
#⇒ 3 

und

'aaa' 
    .length 
#⇒ 3 

sind beide perfekt gültig.

  1. << ist die generische Methode, die in jeder Klasse überschrieben werden kann. Hier ist es angeblich String#<< Methode, die inplace anfügen das Argument an den String-Empfänger.

Im Allgemeinen könnte man diese Methode in jeder beliebigen Klasse überschreiben:

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

So verwenden sie ihre benutzerdefinierte << << -Methode? Vielen Dank! :) –

+1

Nein, wie gesagt, sie benutzen angeblich 'String # <<'. Sie können dies überprüfen, indem Sie die Empfängerklasse untersuchen: 'puts hidden_field_html.class.to_s'. – mudasobwa