使用正确的缩进插入多行字符串

时间:2016-07-21 12:14:07

标签: string interpolation indentation multilinestring

当我尝试将一个多行字符串插入另一个时,我得到错误的缩进,因为只有第一行子字符串具有右缩进,例如:

substring = <<-STRING.strip_heredoc
  first line
  second line
STRING

string = <<-STRING.strip_heredoc
  Quote
    #{ substring }
  from substring
STRING

结果如下:

  Quote
    first line
second line

  from substring

而期望的是

Quote
  first line
  second line
from substring 

我的问题与this question about perl and xmlthis one about erb几乎相同,但更为笼统。

考虑到插值不仅可以用于生成任何SGML(XML,HTML或ERB),还可以用于SQL和其他语言......

是否有任何方法,方法或常规做法可以使用正确的缩进来插入多行字符串?

如果没有办法,您建议使用哪种工具来处理不同的语言(例如HTML,SQL)

更新

Ruby 2.3特性<<~类似于strip_heredoc仍然(显然)仅在子串的第一行添加缩进

1 个答案:

答案 0 :(得分:1)

我醒来后看到了这个问题并决定将它作为早上编程拼图来解决。这比我想象的要难。我对API或复杂性并不感到兴奋,但我不想再浪费时间,而且确实有效。也许你会发现它很有用。如果没有,也许它至少会激发其他一些替代方法。

我不知道使用普通的Ruby Here Documents满足您的需求的任何库或框架。 Ruby 2.3 has a new feature基本上完成了Rails'#strip_heredoc的功能,但我还没有使用它,我不知道它如何处理多行插值。以下是基于您的用例(使用Ruby 2.0)的自定义解决方案的Ruby代码:

https://gist.github.com/shock/1d269a91f938bf1a1c3cba3856bedf19