我有一个类应该看起来像这样:
class Family_Type1
@people = Array.new(3)
@people[0] = Policeman.new('Peter', 0)
@people[1] = Accountant.new('Paul', 0)
@people[2] = Policeman.new('Mary', 0)
def initialize(*ages)
for i in 0 ... @people.length
@people[i].age = ages[i]
end
end
end
我希望能够在运行时定义一堆与此类似的类(在启动时定义一次),其中数组的大小和分配给每个参数的类型是在运行时从外部规范文件定义的。
我使用 evals 让它工作,但这真的很难看。还有更好的办法吗?
据我了解,您需要元编程。这是一段代码,用于使用初始化实例变量的初始化方法动态(即时)创建类 -
class_name = 'foo'.capitalize
klass = Object.const_set(class_name,Class.new)
names = ['instance1', 'instance2'] # Array of instance vars
klass.class_eval do
attr_accessor *names
define_method(:initialize) do |*values|
names.each_with_index do |name,i|
instance_variable_set("@"+name, values[i])
end
end
# more...
end
希望您可以调整它以满足您的要求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)