ruby – 使用继承和特定访问器动态创建类
发布时间:2020-12-17 03:13:09 所属栏目:百科 来源:网络整理
导读:我想构建一个函数“create”,它具有以下功能: zoo=[]zoo create(:dog,4)zoo[0].class #Dog classmyDog=zoo[0].new("foobar") #instance of DogmyDog.legs #4 legs because my dog is a Dogzoo[0].class.legs #4zoo[0].class.superclass #Animalzoo[0].class
我想构建一个函数“create”,它具有以下功能:
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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |