使用正确的缩进插入多行字符串
Interpolate multiline string with correct indent
当我试图将一个多行字符串插入另一个多行字符串时,我得到了错误的缩进,因为只有子字符串的第一行有正确的缩进,例如:
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 xml, or this one about erb 中的问题几乎相同,但更笼统一些。
考虑到插值不仅可用于生成任何 SGML(XML、HTML 或 ERB),而且可用于生成 SQL 和其他语言...
是否有任何方式、方法或惯例来插入具有正确缩进的多行字符串?
如果没有办法,你会推荐什么工具来post处理不同的语言(例如HTML,SQL)
更新:
Ruby 2.3 功能 <<~
类似于 strip_heredoc
仍然(显然)仅在子字符串的第一行添加缩进
我一觉醒来看到了这个问题,决定把它作为一个早上的编程难题来解决。这比我想象的要难。我对 API 或复杂性并不满意,但我不想再花时间了,它确实有效。也许你会发现它很有用。如果没有,也许它至少会激发其他一些替代方法。
我不知道有任何库或框架可以使用简单的 Ruby Here Documents 满足您的需求。 Ruby 2.3 has a new feature 基本上完成了 Rails' #strip_heredoc
的工作,但我没有使用过它,我不知道它如何处理多线插值。这是我根据您的用例(使用 Ruby 2.0)自定义解决方案的 Ruby 代码:
https://gist.github.com/shock/1d269a91f938bf1a1c3cba3856bedf19
当我试图将一个多行字符串插入另一个多行字符串时,我得到了错误的缩进,因为只有子字符串的第一行有正确的缩进,例如:
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 xml, or this one about erb 中的问题几乎相同,但更笼统一些。
考虑到插值不仅可用于生成任何 SGML(XML、HTML 或 ERB),而且可用于生成 SQL 和其他语言...
是否有任何方式、方法或惯例来插入具有正确缩进的多行字符串?
如果没有办法,你会推荐什么工具来post处理不同的语言(例如HTML,SQL)
更新:
Ruby 2.3 功能 <<~
类似于 strip_heredoc
仍然(显然)仅在子字符串的第一行添加缩进
我一觉醒来看到了这个问题,决定把它作为一个早上的编程难题来解决。这比我想象的要难。我对 API 或复杂性并不满意,但我不想再花时间了,它确实有效。也许你会发现它很有用。如果没有,也许它至少会激发其他一些替代方法。
我不知道有任何库或框架可以使用简单的 Ruby Here Documents 满足您的需求。 Ruby 2.3 has a new feature 基本上完成了 Rails' #strip_heredoc
的工作,但我没有使用过它,我不知道它如何处理多线插值。这是我根据您的用例(使用 Ruby 2.0)自定义解决方案的 Ruby 代码:
https://gist.github.com/shock/1d269a91f938bf1a1c3cba3856bedf19