gpt4 book ai didi

ruby - 从类方法调用 super

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

当重新定义一个类方法时,我希望能够调用 super,就像在实例方法中一样。

例如,我有一个类 hi 和一个类方法 Hi.hi

class Hi
def self.hi
puts "hi"
end
end

Hi.hi #=> "hi"

现在,假设我想重新定义 self.hi

class Hi
def self.hi
super
puts "Oh!"
end
end

Hi.hi #=> NoMethodError: super: no superclass method `hi' for Hi:Class

为什么这行不通?

我知道我可以使用别名(如下所示)获得相同的功能,这似乎是不必要的。

class Hi
class << self
def new_hi
old_hi
puts "Oh!"
end
alias :old_hi :hi
alias :hi :new_hi
end
end

Hi.hi #=> "hi\n Oh!"

有更好的方法吗?

最佳答案

Super 适用于从父类继承的子类。

在您的情况下,别名是唯一的方法。或者你可以使用 alias_method :

alias_method :old_hi, :hi

def self.hi
old_hi
puts "Oh!"
end

关于ruby - 从类方法调用 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6753808/

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