gpt4 book ai didi

Ruby - 在父类(super class)中调用另一个类方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:18 24 4
gpt4 key购买 nike

class A
def self.a
puts "self: #{self}; superclass: #{superclass}"
end
end

class B < A
class << self; undef_method(:a); end # I'm not allowed to use B.a
def self.b
# here I want to call A.a with B as self.
end
end

A.a #=> self: A; superclass: Object
B.b #=> self: B; superclass: A (expected)

我不需要alias_method 解决方案。我正在寻找类似 this 的内容.

更新

解决方案不需要与上面的链接有任何相似之处;这只是一个建议。例如,我尝试这样做:

class B < A
def self.b
instance_eval(&A.method(:a).to_proc)
end
end

但是这样我在 Ruby 1.8.7 上得到了一个奇怪的 ArgumentError

最佳答案

我认为使用您链接到的 SuperProxy 方法不可行。

在这种情况下,A.method(:a) 是一个单例方法。单例方法只能绑定(bind)到创建它的对象。特别是,它不能反弹到 B

这是我尝试的第一个无效方法:

class B < A
def self.b
A.method(:a).unbind.bind(self).call
end
end

第二种无效的方法:

class B < A
class << self
define_method :b, A.method(:a)
end
end

两者都会生成“TypeError: singleton method bound for a different object”异常。

关于Ruby - 在父类(super class)中调用另一个类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775165/

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