【发布时间】:2014-08-21 08:56:00
【问题描述】:
我有以下方法,它定义了一个带有多个键的哈希(有很多,我只是为了这个例子把它删掉了)。
def data
@data ||= {
name: "Some Name",
email: "my@email.com"
}
end
现在,我想在同一个类中的另一个方法中使用每个键,如下所示:
[:name, :email].each { |key| define_method("get_#{key}") { data[key] } }
虽然这可以正常工作,但对密钥进行硬编码似乎不是一个好主意——我宁愿让它们动态化,并让它们从我在第一种方法中创建的哈希中重用。由于我从另一个类调用该类的实例,因此在使用明显方法时出现以下错误:
data.keys.each { |key| define_method("get_#{key}") { data[key] } }
# => undefined local variable or method `data' for #<Class:0x0000000dc55938>
有什么办法可以解决这个问题吗?
【问题讨论】:
-
如果你想在同一个类中使用那有什么问题,只需调用该方法并使用键。你想在另一个类中使用这些键吗?
-
@pramod 我更新了问题以澄清问题。
-
看来你没有从另一个类调用这个类的实例。因为如果你想调用数据方法,你必须从你定义的类实例中调用它。例如,如果 A 类中存在数据方法,那么如果您没有任何继承机制,则必须从 A 的实例调用它。
标签: ruby-on-rails ruby hash metaprogramming