Jer*_* B. 2 ruby dynamic-method
我有以下代码用于将哈希集合转换为我的类上的方法(有点像活动记录).我遇到的问题是我的二传手不能正常工作.我对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
Run Code Online (Sandbox Code Playgroud)
这些方法已创建,我可以在课堂上阅读它们,但设置它们不起作用.
myClass = TheClass.new
item = myClass.property # will work.
myClass.property = item # this is what is currently not working.
Run Code Online (Sandbox Code Playgroud)
如果您的目标是设置动态属性,那么您可以使用OpenStruct.
require 'ostruct'
person = OpenStruct.new
person.name = "Jennifer Tilly"
person.age = 52
puts person.name
# => "Jennifer Tilly"
puts person.phone_number
# => nil
Run Code Online (Sandbox Code Playgroud)
它甚至内置支持从哈希创建它们
hash = { :name => "Earth", :population => 6_902_312_042 }
planet = OpenStruct.new(hash)
Run Code Online (Sandbox Code Playgroud)