gpt4 book ai didi

Ruby 动态实例化类

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:57 24 4
gpt4 key购买 nike

如何在静态方法中引用类?

class Car
def self.new_from_xml(xml)
instance = self.class.new
#do some stuff with xml
instance
end
end

class Mercedes < Car
end

class Porsche < Car
end

IRB:

Mercedes.new_from_xml(somedata) # Output is #<Class:...>, should be #<Mercedes:...>
Porsche.new_from_xml(somedata) # Output is #<Class:...>, should be #<Porsche:...>

最佳答案

代替

instance=self.class.new

随便写

instance = new

这是为什么?

好吧,首先,您必须了解您正在调用类方法,因此您已经处于类级别。 .new方法是类方法,可以直接调用,不需要调用self.class.new。

为什么 self.class.new 会返回 Class?

因为类 Car 的类是 Class(我知道,听起来很奇怪;),因为 Ruby 中的类是 Class 的实例。

这其实是一个很深的概念,我建议你多读一读。我读过的一本很好的引用书是 Paolo Perrotta 的 Metaprogramming Ruby 一书(ISBN-10:1934356476)[1]。

  1. http://www.amazon.com/Metaprogramming-Ruby-Program-Like-Pros/dp/1934356476

关于Ruby 动态实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15787122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com