【发布时间】:2011-03-11 13:35:15
【问题描述】:
我有以下代码用于将哈希集合转换为我的类上的方法(有点像活动记录)。我遇到的问题是我的二传手不工作。我对 Ruby 还是很陌生,相信我已经让自己有所转变。
class TheClass
def initialize
@properties = {"my hash"}
self.extend @properties.to_methods
end
end
class Hash
def to_methods
hash = self
Module.new do
hash.each_pair do |key, value|
define_method key do
value
end
define_method("#{key}=") do |val|
instance_variable_set("@#{key}", val)
end
end
end
end
end
方法已创建,我可以在课堂上阅读它们,但设置它们不起作用。
myClass = TheClass.new
item = myClass.property # will work.
myClass.property = item # this is what is currently not working.
【问题讨论】:
-
好奇你为什么会选择这条路线而不是method_missing?
-
我不太明白。 method_missing 只会提醒我没有方法。我希望能够像上面的代码一样设置属性,问题是它不起作用。
-
使用method_missing,您实际上会将调用捕获到一个不存在的方法,然后根据方法名称和参数实现您的功能。
-
该方法存在,我没有收到错误,它只是从未真正设置属性。我不想捕获错误。我要设置属性。
-
谢谢乔纳斯,我认为很明显这是一个占位符。感谢您的关心。
标签: ruby dynamic-method