我正在尝试做一个instance_eval
随后是一个attr_accessor
inside initialize
,我不断收到这样的消息:“初始化”:未定义的方法“attr_accessor”。为什么这不起作用?
代码看起来有点像这样:
class MyClass
def initialize(*args)
instance_eval "attr_accessor :#{sym}"
end
end
您无法在实例上调用 attr_accessor,因为 attr_accessor 未定义为 MyClass 的实例方法。它仅适用于模块和类。我怀疑您想在实例的元类上调用 attr_accessor,如下所示:
class MyClass
def initialize(varname)
class <<self
self
end.class_eval do
attr_accessor varname
end
end
end
o1 = MyClass.new(:foo)
o2 = MyClass.new(:bar)
o1.foo = "foo" # works
o2.bar = "bar" # works
o2.foo = "baz" # does not work
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)