这一点代码摘自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
它是Ruby中的多行字符串,内容被插值然后在PostgreSQL中执行。这是在命令行上运行脚本的标准方法。我用它来编写Capistrano内部的AWS脚本。
它使用此处的DOC语法。
http://blog.jayfields.com/2006/12/ruby-multiline-strings-here-here-doc-or.html
http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-here-here-here documents
它的官方名称是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起作用,但是您可以看到第二个看起来更丑陋。选择自己使用时喜欢的任何一种,但请确保注意空白空间和字符串定界符的结束,如果您不包括破折号。