gpt4 book ai didi

ruby - 为什么在这里调用 super 失败

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

 module A
def foo
if super.respond_to? :foo
puts 'super responded to :foo'
end
end
end

class Lab
include A
end

puts Lab.ancestors.inspect #=> Lab, A, Object, Kernel, BasicObject]
Lab.new.foo

foo': super: 没有父类(super class)方法foo' for # (NoMethodError)

我假设在这种情况下,对 super 的调用将转至 Object,然后转至 BasicObject,最后将返回 false。

为什么我得到 no superclass method foo

我正在使用 ruby 1.9.3。

最佳答案

Super调用父类的同名方法。

if super.respond_to? foo

该行将在层次结构中的任何父类上调用 foo。

编辑:

你可能想做类似的事情

self.ancestors.select{|a| a.respond_to? :foo}.size > 0

作为支票。

关于ruby - 为什么在这里调用 super 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15974790/

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