gpt4 book ai didi

ruby - 在执行时向类添加方法的最佳方法

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

我必须在执行时向类添加方法。

class ExtendableClass
end

要添加的方法在独立的类中声明。

module ExtensionClassOne
def method_one
end
end

module ExtensionClassTwo
def method_two
end
end

我正在寻找一种(优雅的)机制来将所有扩展类 方法添加到ExtendableClass 中。

方法一

我正在考虑明确包含扩展类,例如:

ExtendableClass.send( :include, ExtensionClassOne )
ExtendableClass.send( :include, ExtensionClassTwo )

但每次我定义一个新的扩展类时都必须调用这个私有(private)方法,这看起来有点被迫。

方法二

所以我一直在寻找一种自动方法来将此方法包含到我的ExtendableClass类中。

我正在考虑为这个扩展类声明一个特定的祖先:

class ExtensionClassOne < Extension
def method_one
end
end

然后我需要一种机制来了解一个类(class)的所有 child ...类似于ancestors 的反义词.

一旦有了这个列表,我就可以轻松地 ExtendableClass.include 所有类列表。即使我必须在这里调用私有(private)方法。

方法三

同样继承自 Extension 类并在声明时检测该类何时用作祖先。以ActiveSupport.included method的方式像事件绑定(bind)一样有效。然后在那里制作 include

是否有实现方法 2方法 3 的解决方案?您是否推荐方法 1?新方法?

最佳答案

@fguillen,“明确的方式是最干净的方式”,你是对的。既然如此,何不使用能想到的最“明确”的代码:

class Extendable
end

class Extendable
def method_one
puts "method one"
end
end

class Extendable
def method_two
puts "method two"
end
end

...换句话说,如果您正在定义一个模块,一旦定义它就会自动包含在一个类中,为什么还要费心去处理这个模块呢?只需将您的“扩展”方法直接添加到类中即可!

关于ruby - 在执行时向类添加方法的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9839383/

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