从导轨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
但我从未在函数调用的参数中看到过这种情况。我真的很困惑。有人可以向我解释一下究竟发生了什么吗?
答案 0 :(得分:13)
你可以在一行中的任何地方(甚至多次)使用heredoc标记(例如你的例子中的<<-SQL
),然后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")