gpt4 book ai didi

ruby - 动态创建类,具有继承和特定访问器

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:25 29 4
gpt4 key购买 nike

我想构建一个“创建”函数,它赋予我以下功能:

zoo=[]
zoo << create(:dog,4)
zoo[0].class #Dog class
myDog=zoo[0].new("foobar") #instance of Dog
myDog.legs #4 legs because my dog is a Dog
zoo[0].class.legs #4
zoo[0].class.superclass #Animal
zoo[0].class.superclass.legs #whatever, but they have legs

"create(:dog,4)"产生一个继承 Animal 等的新类 Dog

你能帮忙解决这个看似简单的元编程问题吗?

最佳答案

class Animal
def self.legs=(legs)
@legs = legs
end

def self.legs
@legs
end

def legs
self.class.legs
end
end

def create(sym, legs)
klass = Object.const_set(sym.to_s.capitalize, Class.new(Animal))
klass.legs = legs
klass
end

kdog = create(:dog, 4)
kalien = create(:alien, 3)

dog = kdog.new
alien = kalien.new

puts kdog
puts kdog.class
puts kdog.superclass
puts kdog.legs

puts dog.class
puts dog.legs

puts "------"

puts kalien
puts kalien.class
puts kalien.superclass
puts kalien.legs

puts alien.class
puts alien.legs

输出:

Dog
Class
Animal
4
Dog
4
------
Alien
Class
Animal
3
Alien
3

关于ruby - 动态创建类,具有继承和特定访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795203/

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