bra*_*rad 4 ruby syntax heredoc
来自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
Run Code Online (Sandbox Code Playgroud)
我之前看过代码你可以说:
blah = <<-X
some
lines
of
test
X
Run Code Online (Sandbox Code Playgroud)
但我从未在函数调用的参数中看到过这种情况.我真的很困惑.有人可以向我解释一下究竟发生了什么吗?
sep*_*p2k 13
你可以<<-SQL
在一行中的任何地方(甚至多次)使用heredoc标记(如你的例子中),然后heredoc将从下一行开始并继续直到满足结束标记(如果有多个标记,则(n + 1)heredoc将在第n个结束标记之后开始并继续向上(n + 1)个结束标记.然后将每个heredoc的内容插入使用相应标记的位置.
所以
foo(<<BAR, 42)
bar
BAR
Run Code Online (Sandbox Code Playgroud)
是相同的
foo("bar\n", 42)
Run Code Online (Sandbox Code Playgroud)
和
foo(<<BAR, <<BAZ)
bar
BAR
baz
BAZ
Run Code Online (Sandbox Code Playgroud)
是相同的
foo("bar\n", "baz\n")
Run Code Online (Sandbox Code Playgroud)