2016-04-19 17 views
4

<<-は、次の方法/コンテキストではどういう意味ですか?<< Rubyの意味

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

答えて

5

ここでは、このドキュメントの最初に説明します。おそらくあなたが混乱しているのは、ここの文書が次の行から始まるということです。その行の中でその式の後に続くものはすべて、ここの文書の続きです。

クラス環境で、ここでの文書の内容を評価することを意味し、エラーが発生するたびに
class_eval heredoc, __FILE__, __LINE__ + 1 

、准:したがって、ここでの内容は、文書がheredocとして表現されていることを考えると、式は同等です現在のファイル(__FILE__)とここの文書の最初の行(つまり、最初の行の後の行、__LINE__ + 1)は1行目と見なす必要があります。

8

また、「ヒアドキュメント」として知られている複数行の文字列の始まりを知らせます。

フォーマットのいずれかであり得る:

<<[ID] 
contents 
[ID] 

又は

<<-[ID] 
contents 
[ID] 

最初のケースでは、閉鎖[ID]は、行の先頭に配置されなければならないことである差、一方2番目のケースでは、[ID]をインデントしてよりクリーンなコードにすることができます。

+0

これはおそらく、任意の文字または数字heredoc: 'puts << -_ END_';' stuff'; '_END_'また、中括弧を使ってheredocsで文字列補間を行うこともできます:' x = "string" ';' puts << - -END ';'#{x } ';' -END-' – 13aal

関連する問題