gpt4 book ai didi

ruby - 我可以检测到某个方法已被覆盖吗?

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

假设这里有一些我不知道的任意库代码:

class Foo
def hi
end
end

class Bar < Foo
def hi
end
end

假设我有一些代码将 Bar 作为参数传递给了我。

def check(x)
do_something_with(x.method(:hi))
end

在上面的例子中,我能知道x.hi(其中x 引用Bar 的实例)与Foo#hi?


根据 Gareth 的回答,这是我目前得到的:

def is_overridden?(method)
name = method.name.to_sym
return false if !method.owner.superclass.method_defined?(name)
method.owner != method.owner.superclass.instance_method(name).owner
end

丑陋?华丽?

最佳答案

你可以这样做:

if x.method(:hi).owner == Foo

我远不是 Ruby 专家;如果有人有比这更好的方法,我不会感到惊讶。

关于ruby - 我可以检测到某个方法已被覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462430/

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