代码中的"<<-"是什么?



这一点代码摘自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起作用,但是您可以看到第二个看起来更丑陋。选择自己使用时喜欢的任何一种,但请确保注意空白空间和字符串定界符的结束,如果您不包括破折号。

相关内容

  • 没有找到相关文章

最新更新