4

レールからpostgresql_adapter.rb。私はそれがやろうとしていることを理解します、私はそれがどのように起こるのか理解していません。私が失ったのは、本当に<<-SQLと関係があります。

exec_query(<<-SQL, 'SCHEMA', binds).rows.first[0].to_i > 0
  SELECT COUNT(*)
  FROM pg_tables
  WHERE tablename = $1
  #{schema ? "AND schemaname = $2" : ''}
SQL

私はあなたが言うことができる前にコードを見ました:

blah = <<-X
 some
 lines
 of
 test
X

しかし、これが関数呼び出しの引数内で行われるのを見たことがありません。私はこれに本当に混乱しています。誰かが私にここで何が起こっているのかを正確に説明できますか?

4

1 に答える 1

13

ヒアドキュメントマーカー(<<-SQL例のように)を行のどこでも(または複数回)使用できます。ヒアドキュメントは次の行から始まり、終了マーカーに達するまで続きます(複数のマーカーの場合、 (n + 1)番目のヒアドキュメントはn番目のエンドマーカーの後に始まり、(n + 1)番目のエンドマーカーまで続きます)。次に、各ヒアドキュメントのコンテンツが、対応するマーカーが使用された場所に挿入されます。

それで

foo(<<BAR, 42)
bar
BAR

と同じです

foo("bar\n", 42)

foo(<<BAR, <<BAZ)
bar
BAR
baz
BAZ

と同じです

foo("bar\n", "baz\n")
于 2011-06-07T01:54:52.220 に答える