Ruby 编程进阶:单例类、方法包装与元编程挑战
1. 单例类与模块的融合
在编程过程中,我们经常会遇到需要为类或对象添加特定方法的情况。单例类和模块的结合为我们提供了强大的解决方案。
1.1 模块问题的挑战
许多 Ruby 程序员尝试通过包含模块来定义类方法,但往往会失败。例如以下代码:
module MyModule
def self.my_method; 'hello'; end
end
class MyClass
include MyModule
end
MyClass.my_method
# NoMethodError!
这是因为当一个类包含一个模块时,它只会获得模块的实例方法,而不是类方法。类方法存在于模块的单例类中,无法直接被类访问。
1.2 解决方案:类扩展
要解决这个问题,我们可以将 my_method 定义为 MyModule 的常规实例方法,然后将该模块包含在 MyClass 的单例类中。
module MyModule
def my_method; 'hello'; end
end
class MyClass
class << self
include MyModule
end
end
MyClass.my_method
# => "hello"
超级会员免费看
订阅专栏 解锁全文
878

被折叠的 条评论
为什么被折叠?



