gpt4 book ai didi

Ruby 从基类访问派生类 "class methods"

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

我在 Ruby 中有一个基类,它有一个继承的类方法。我想在基类中调用此方法,但向它传递一个由派生类指定的选项,如下所示:

class Base < SuperDuperClass
super_duper_class_method :option => my_option_value

def self.my_option_value
raise "Method my_option_value must be overridden by all subclasses"
end
end

class Derived < Base
def self.my_option_value
"My Derived Option Value"
end
end

但是,这是行不通的。我相信这是因为基类中的顶层代码在派生类中的顶层代码之前执行,所以在调用 super_duper_class_method 时没有定义派生方法。我宁愿不必在所有派生类中调用 super_duper_class_method,而只是指定选项。

有什么想法吗?

最佳答案

当您说它不起作用时,您并没有具体说明。我相信您会在定义基类时(而不是在调用 my_option_value 时)引发异常。

我建议您将方法名称作为符号传递,并在 SuperDuperClass 中调用 send on self 以调用派生方法。

class SuperDuperMethod
def self.some_code
self.class.__send__(options[:option])
end
...

关于Ruby 从基类访问派生类 "class methods",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10190623/

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