2016-04-19 15 views
4

Was bedeutet <<- in der folgenden Methode/Kontext?<< - Bedeutung in Ruby

class_eval <<-RUBY, __FILE__, __LINE__ + 1 
def destroy_associations 
    association(:#{middle_reflection.name}).delete_all(:delete_all) 
    association(:#{name}).reset 
    super 
end 
RUBY 

Antwort

5

Es beschreibt den Beginn eines hier Dokumentes. Wahrscheinlich verwirrt Sie, dass das Here-Dokument von der nächsten Zeile aus beginnt; alles, was diesem Ausdruck innerhalb dieser Zeile folgt, ist eine Fortsetzung des hier vorliegenden Dokuments. Somit gegeben, dass der Inhalt der hier Dokument als heredoc dargestellt wird, ist der Ausdruck entspricht:

class_eval heredoc, __FILE__, __LINE__ + 1 

was bedeutet, den Inhalt des hier Dokuments in einer Klasse-Umgebung zu bewerten, und immer dann, wenn ein Fehler erhöht wird, assoziiertes der Ort mit der aktuellen Datei (__FILE__) und die erste Zeile des hier vorliegenden Dokuments (also die Zeile nach dem Anfang, __LINE__ + 1) sollten als Zeile 1 gezählt werden.

8

Es signalisiert den Beginn eines mehrzeiligen String, der auch als "heredoc" bekannt.

Das Format kann entweder:

<<[ID] 
contents 
[ID] 

oder

<<-[ID] 
contents 
[ID] 

Der Unterschied im ersten Fall zu sein, daß ist die Schließ [ID] am Anfang der Zeile angeordnet werden, während Im zweiten Fall kann die [ID] eingerückt werden, um saubereren Code zu haben.

+0

Es lohnt sich wahrscheinlich zu erwähnen, dass Sie beliebige Buchstaben oder Zahlen verwenden können für ein heredoc: 'puts << -_ END_';' stuff'; '_END_' Sie können auch eine String-Interpolation in heredocs durchführen, indem Sie die ganze geschweifte Klammern-Sache machen:' x = "string" '; puts << - -END -'; '# {x } ';' -END-' – 13aal