有人能解释一下这个ruby代码吗



从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")

相关内容

  • 没有找到相关文章

最新更新