【问题标题】:Interpolate multiline string with correct indent用正确的缩进插入多行字符串
【发布时间】:2016-11-25 00:47:08
【问题描述】:

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

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 功能 &lt;&lt;~strip_heredoc 类似,但仍然(显然)仅在子字符串的第一行添加缩进

【问题讨论】:

    标签: string interpolation indentation multilinestring


    【解决方案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

    【讨论】:

    • 是的,谢谢,我知道 Ruby 2.3 的特性。根据它更新问题。将检查您的解决方案
    • 做得很好,已加星标。也许我会以某种方式改进它
    • 我建议编辑您的答案并添加您的解决方案是用 Ruby 编写的。虽然我的问题也使用 Ruby,但考虑使用其他语言可能还有其他答案
    • @NickRoz,我的回答确实表明它使用 Ruby 2.0,并且由于您使用 Ruby 标记了您的问题并且您的代码是 Ruby,如果您使用其他语言得到任何答案,我会感到惊讶。无论如何,我更新了我的答案以更加明确。如果你走这条路,我希望你能接受。如果您改进它,请发布您的更新。我有兴趣看看。谢谢。
    • 感谢您的努力!我想稍等一下接受答案以收集更多不同的解决方案和解释。删除了标签 ruby​​,我希望它会使问题更广泛
    猜你喜欢
    • 2011-01-31
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2016-02-05
    相关资源
    最近更新 更多