【问题标题】:What is "<<-" in code? [duplicate]代码中的“<<-”是什么? [复制]
【发布时间】:2015-05-04 00:39:21
【问题描述】:

这段代码取自 Ryan Bates 的 Railscast 第 343 集,关于 PostgreSQL 中的全文搜索。我想了解它,但在 &lt;&lt;- 运算符(如果它甚至是运算符)上找不到任何东西。有人可以指出我可以了解的地方吗?

rank = <<-RANK
  ts_rank(to_tsvector(name), plainto_tsquery(#{sanitize(query)})) +
  ts_rank(to_tsvector(content), plainto_tsquery(#{sanitize(query)}))
RANK

【问题讨论】:

  • Here-documents。我的回答只是链接中信息的副本/格式。

标签: ruby-on-rails ruby railscasts


【解决方案1】:

它是ruby中的多行字符串,内容被插值然后在PostgreSQL中执行。这是在命令行上运行脚本的标准方式。我用它在 Capistrano 中编写 AWS 脚本。

它使用 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

【讨论】:

【解决方案2】:

它的正式名称是heredoc,您可以通过两种不同的方式使用它们。 一个是你如何布置它的起点是&lt;&lt;-NAME,终点是NAME

另一种方法是&lt;&lt;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,但是您可以看到第二个看起来有点丑陋。自己使用时选择您喜欢的任何一个,但如果您不包含破折号,请务必注意空格和字符串结尾分隔符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 2013-05-15
    • 2023-03-19
    • 2021-07-29
    • 2014-01-10
    • 2018-07-07
    • 1970-01-01
    相关资源
    最近更新 更多