如何避免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
相关产品推荐
相关产品推荐

