4

从 rails 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您可以在一行中的任何位置(甚至多次)使用heredoc-marker(如您的示例中),然后heredoc将从下一行开始并继续直到遇到结束标记(如果有多个标记,则第 (n+1) 个 heredoc 将在第 n 个结束标记之后开始并继续到第 (n+1) 个结束标记)。然后将每个heredoc的内容插入到使用相应标记的位置。

所以

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 回答