【发布时间】:2015-03-24 02:17:19
【问题描述】:
我正在尝试基于散列 my_hash 在已初始化的 Ruby 对象 MyObject 上动态定义方法,我传递给它的 initialize 方法。在initialize 方法的主体中,我有以下内容:
my_hash.each do |key|
class << self
define_method(key.underscore.to_sym) do
my_hash[key]
end
end
end
这会失败并显示undefined local variable or method 'key' for #<Class:#<MyObject:0x007fc7abw0cra0>>。任何想法为什么?
my_hash 是由带有许多驼峰键的 json 响应组成的,因此使用简单的 ruby 方法来获取我想要的值会更方便。
【问题讨论】:
-
将您的哈希转换为 OpenStruct,这将为您的每个密钥创建一个方法。
-
但这不会使 MyObject 对象上的方法可用吗?除非我以某种方式重新定义 method_missing 以将调用传递给 OpenStruct 对象。
标签: ruby metaprogramming eigenclass