红宝石中带有多行字符串的空格

Mar*_*lar 6 ruby string multiline

我有多行字符串的空白问题.

我在我的代码中有类似的东西,我正在生成一些SQL.

def generate_sql
   <<-EOQ
      UPDATE page
         SET view_count = 10;
   EOQ
end
Run Code Online (Sandbox Code Playgroud)

但是后来我的SQL缩进都搞砸了,我真的不想要.

"       UPDATE page\n          SET view_count = 10;\n"
Run Code Online (Sandbox Code Playgroud)

我可以

    def generate_sql
<<-EOQ
UPDATE page
   SET view_count = 10;
EOQ
    end
Run Code Online (Sandbox Code Playgroud)

哪个输出正是我想要的

"UPDATE page\n   SET view_count = 10;\n" 
Run Code Online (Sandbox Code Playgroud)

但是我的代码缩进都搞砸了,我真的不想要.

关于如何最好地实现我的目标的任何建议?

ste*_*eel 8

Ruby 2.3.0 用波浪形的 heredoc很好地解决了这个问题。请注意示例之间波浪号/连字符的区别。

hyphen_heredoc = <<-MULTILINE_STRING
                    One line
                    Second line
                      Indented two spaces
                    MULTILINE_STRING

squiggly_heredoc = <<~MULTILINE_STRING_WITH_TILDE
                      One line
                      Second line
                        Indented two spaces
                      MULTILINE_STRING_WITH_TILDE

2.3.0 :001 > puts hyphen_heredoc
                      One line
                      Second line
                        Indented two spaces
2.3.0 :002 > puts squiggly_heredoc
One line
Second line
  Indented two spaces
Run Code Online (Sandbox Code Playgroud)

使用波浪形的heredoc,将从内容的每一行中删除最小缩进行的缩进


Nik*_* B. 7

有这样的图书馆ruby-dedent让你这样做

require 'dedent'

def generate_sql
   <<-EOQ.dedent
      UPDATE page
         SET view_count = 10;
   EOQ
end
Run Code Online (Sandbox Code Playgroud)

结果如何

"UPDATE page\n   SET view_count = 10;"
Run Code Online (Sandbox Code Playgroud)