【问题标题】:How to use string interpolation in Ruby HEREDOC multi line string如何在 Ruby HEREDOC 多行字符串中使用字符串插值
【发布时间】:2022-12-22 19:31:30
【问题描述】:

我有一个像这样的多行 HEREDOC:

c = <<-MYTEXT
{ 'Cache-Control' => "public, max-age=#{2.days.to_i}" }
MYTEXT

这引发了错误

undefined method `days' for 2:Integer (NoMethodError)

我不希望 Ruby 插入字符串并将 2 天的值写入整数,而是我希望它准确地写入字符串 #{2.days.to_i}

如果我逃避 # 和 \ 写它像

{ 'Cache-Control' => "public, max-age=\#\{2.days.to_i\}\" }

它有效,但想象一下带有许多 #{} 字符串插值的长文本,很难看。

这样做有什么更聪明的方法吗?

【问题讨论】:

  • “有效”——您对“有效”的定义是什么?这不会在字符串中插入值。
  • 插值似乎工作得很好。问题是 2.days 引发了 NoMethodError,即 days 方法未知。您可能忘记了提供此 extensionrequire "active_support"。 (或者使用60*60*24*2或硬编码172800
  • 我想我还没有足够清楚地解释我的意图。我不希望对字符串进行插值,我希望它完全按照 #{2.days.to_i}" 的形式编写。我正在更新问题以使其更精确。
  • 是的,您根本没有对此进行解释(在第一个版本中)。这个问题字面意思是“如何使用字符串插值”。

标签: ruby


【解决方案1】:

您可以使用单引号字符串“禁用”插值

c = <<-'MYTEXT'
{ 'Cache-Control' => "public, max-age=#{2.days.to_i}" }
MYTEXT

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 2013-06-09
    • 2011-11-15
    • 2011-10-19
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2016-01-19
    相关资源
    最近更新 更多