这段代码取自Ryan Bates的Railscast第343集,内容是关于PostgreSQL中的全文搜索。我想理解它,但我在<<-
运算符上找不到任何内容(如果它甚至是运算符)。有人可以指点我到可以了解的地方吗?
rank = <<-RANK
ts_rank(to_tsvector(name), plainto_tsquery(#{sanitize(query)})) +
ts_rank(to_tsvector(content), plainto_tsquery(#{sanitize(query)}))
RANK
答案 0 :(得分:5)
它是ruby中的多行字符串,内容被内插,然后在PostgreSQL中执行。这是在命令行上运行脚本的标准方法。我用它来从Capistrano中编写AWS Scripts。
它使用here-doc语法。
http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-doc-or.html
http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Here+Documents
答案 1 :(得分:2)
它的正式名称是heredoc
,您可以通过两种不同的方式使用它们。
一个是如何将其布置在开头为<<-NAME
的位置,结尾将简单为NAME
。
另一种方法是<<NAME
,但在关闭时你必须确保线上NAME
之前没有空格。下面的一些示例代码显示了差异。
def sample_method
heredoc1 = <<-NAME
This is a sample heredoc
NAME
heredoc2 = <<OTHERHEREDOC
Both of these are the same thing
OTHERHEREDOC
end
这两个都可以作为heredocs,但正如你所看到的那样,第二个看起来有点丑陋。在您自己使用时选择您喜欢的任何一种,但如果您不包括短划线,请务必注意空白区域和字符串分隔符的结尾。