You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免Ruby HEREDOC多行字符串中的字符串插值

避免Ruby HEREDOC自动插值的简便方法

针对你遇到的问题,有几种无需逐个转义#{...}的简便方案:

1. 给HEREDOC标记加上单引号

这是最直接的解决方式,当用单引号包裹HEREDOC的结束标记时,Ruby会将整个HEREDOC内容当作单引号字符串处理,完全跳过插值解析,所有#{}语法都会原样保留:

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

执行这段代码后,c的内容就是你想要的原始字符串,不会触发days方法未定义的错误。

2. 使用非插值的多行字符串语法

如果HEREDOC格式不是必须的,也可以用%q{}定义多行字符串,同样不会解析插值:

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

这种方式同样能保留所有#{}标记,适合较短的多行文本场景。

3. 可选:冻结字符串优化性能

如果不需要修改该字符串,可以追加freeze方法,既优化性能也能避免意外修改:

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

内容的提问来源于stack exchange,提问作者Ymox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 01:25:12