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

Ruby反射:如何在each块中获取数组元素的原始定义?

Ruby中each块无法直接获取数组元素的原始表达式

不行,Ruby在执行数组初始化阶段就会先计算所有元素的表达式,把求值结果存入数组,原始的表达式定义在运行时已经完全丢失了,each块只能拿到计算后的最终值。

具体原因:

  • 对于[Integer.class, String.class, Module.class],Ruby会先执行每个元素的class调用,得到Class对象后再存入数组,数组里存储的都是Class实例,没有任何关于Integer.class这个调用语句的信息。
  • 对于[1+1,2+2],Ruby会先完成算术运算,把2和4放进数组,原始的1+1、2+2表达式不会被保留在数组中。

可行的替代方案(基于字符串保存表达式)

如果需要同时获取表达式和结果,只能手动将表达式以字符串形式存储,再通过eval执行,示例:

["1+1", "2+2", "Integer.class"].each do |expr|
  puts "#{expr} → #{eval(expr)}"
end

输出:

1+1 → 2
2+2 → 4
Integer.class → Class

进阶思路(借助AST解析)

如果不想用字符串存储,只能通过解析Ruby代码的抽象语法树(AST)来获取原始表达式,比如使用parser gem。但这需要在代码运行前解析源码文本,并非从运行时的数组元素中直接提取原始定义,本质还是依赖对原始代码的访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:08:13