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

Ruby读取含Heredoc的文本文件:如何去除语法并完成变量插值?

解决方案

你当前的代码只是读取了文件的原始字符串,并没有让Ruby解析Heredoc中的插值逻辑。要实现需求,需要分两步:提取Heredoc内部的文本,再让Ruby执行插值计算。

步骤1:定义依赖方法(如果还没定义)

原问题中用到了upcase_def方法,确保先在代码中定义它:

def upcase_def(str)
  str.upcase
end

步骤2:读取并处理文件内容

# 读取文件的原始内容
raw_content = File.read("path_directory/file_with_heredoc.txt")

# 用正则提取Heredoc标记(EOM)之间的内容
# 正则中的m修饰符允许.匹配换行符,.*?做非贪婪匹配避免匹配到多余内容
inner_text = raw_content.match(/<<-EOM\n(.*?)EOM/m)[1].strip

# 将提取的文本转为Ruby可解析的双引号字符串,执行插值计算
final_result = eval("\"#{inner_text}\"")

# 输出最终结果
puts final_result

代码解释

  1. 提取Heredoc内容:通过正则匹配去掉外层的file = <<-EOM和EOM标记,只保留需要插值的文本部分。
  2. 执行插值:用eval将提取的文本包装成双引号字符串,让Ruby自动解析其中的#{}插值表达式,执行对应的方法调用并替换结果。
  3. 安全提醒:eval会执行任意Ruby代码,仅当你能确保读取的文件是可信的(比如用户自己编写的模板)时使用,避免注入风险。

运行这段代码后,终端会输出你期望的结果:

single text with def result: HELLO

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:43