从rails postgresql_adapter.rb。我知道它试图做什么,只是不知道它是如何发生的。这实际上与<lt-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
但我从未见过在函数调用的参数中这样做。我真的很困惑。有人能向我解释一下这里到底发生了什么吗?
您可以在一行中的任何位置(甚至多次)使用heredoc标记(如示例中的<<-SQL
),然后heredoc将从下一行开始并继续,直到满足结束标记为止(如果有多个标记,则第(n+1)个heredoc将在第n个结束标记之后开始,并一直持续到第(n+1)个结束标记)。然后,每个heredoc的内容将插入到使用相应标记的位置。
所以
foo(<<BAR, 42)
bar
BAR
与相同
foo("barn", 42)
和
foo(<<BAR, <<BAZ)
bar
BAR
baz
BAZ
与相同
foo("barn", "bazn")