2

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

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 

我的问题与这个关于 perl 和 xml的问题几乎相同,或者这个关于 erb但更笼统的问题。

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

有什么方法、方法或惯例可以用正确的缩进插入多行字符串?

如果没有办法,你会推荐什么工具来后处理不同的语言(例如 HTML、SQL)


更新:

Ruby 2.3 的功能<<~类似于strip_heredoc特性仅在子字符串的第一行添加缩进

4

1 回答 1

1

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

我不知道有任何库或框架可以使用普通的 Ruby Here Documents 满足您的需求。Ruby 2.3 有一个新特性,基本上做 Rails 做的事情#strip_heredoc,但我没有用过,也不知道它是如何处理多行插值的。这是基于您的用例的自定义解决方案的 Ruby 代码(使用 Ruby 2.0):

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

于 2016-07-21T15:22:33.117 回答