gpt4 book ai didi

ruby - 为特定类创建父类(super class)数组

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

我正在尝试为给定类创建一个包含所有父类(super class)的数组。我试图通过使用循环来解决这个问题。为什么这不起作用?

class Object
def superclasses
array = []
klass = self.superclass
unless klass == nil
array << klass
klass = klass.superclass
end
array
end
end

class Bar
end

class Foo < Bar
end

p Foo.superclasses # should be [Bar, Object, BasicObject]

最佳答案

unless 不是循环。你要找的是 until:

class Object
def superclasses
array = []
klass = self.superclass
until klass == nil
array << klass
klass = klass.superclass
end
array
end
end

class Bar
end

class Foo < Bar
end

p Foo.superclasses # Prints "[Bar, Object, BasicObject]"

此外,您不需要为此使用新方法。已经有一个方法叫做 Module#ancestors基本上可以满足您的需求:

class Bar
end

class Foo < Bar
end

p Foo.ancestors # Prints "[Foo, Bar, Object, Kernel, BasicObject]"

请注意,ancestors 的返回值包括 Foo 本身,以及包含在继承链中的模块,如 Kernel。如果你不想这样,你可以像这样定义父类(super class):

class Module
def superclasses
ancestors[1..-1].select{|mod| mod.is_a? Class }
end
end

class Bar
end

class Foo < Bar
end

p Foo.superclasses # Prints "[Bar, Object, BasicObject]"

关于ruby - 为特定类创建父类(super class)数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28114240/

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