如何从Ruby HEREDOC中删除主要的空白字符?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

我遇到了一个我试图制作的Ruby heredoc的问题。我的方法如下所示:

    def distinct_count
    <<-EOF
        \tSELECT
        \t CAST('#{name}' AS VARCHAR(30)) as COLUMN_NAME
        \t,COUNT(DISTINCT #{name}) AS DISTINCT_COUNT
        \tFROM #{table.call}
    EOF
end

我的输出如下所示:

    => "            \tSELECT\n            \t CAST('SRC_ACCT_NUM' AS VARCHAR(30)) as
COLUMN_NAME\n            \t,COUNT(DISTINCT SRC_ACCT_NUM) AS DISTINCT_COUNT\n
        \tFROM UD461.MGMT_REPORT_HNB\n"

这当然是正确的,在这个特定的例子中,除了第一个“和\ t之间的所有空格,没有人知道我在这里做错了什么吗?

提问于
用户回答回答于

<<-heredoc 的形式只会忽略最后分隔符的前导空格。

在Ruby 2.3和更高版本中,可以使用一个波浪形的heredoc(<<~)来压缩内容行的前导空格:

def test
  <<~END
    First content line.
      Two spaces here.
    No space here.
  END
end

test
# => "First content line.\n  Two spaces here.\nNo space here.\n"

 
用户回答回答于

如果使用的是Rails 3.0或更新版本,请尝试#strip_heredoc文档中的这个示例输出前三行不缩进,同时保留最后两行的双空格缩进:

if options[:usage]
  puts <<-USAGE.strip_heredoc
    This command does such and such.
 
    Supported options are:
      -h         This message
      ...
  USAGE
end

该文档还指出:“从技术上讲,它会在整个字符串中查找最少的缩进行,并删除这些数量的前导空白。”

扫码关注云+社区