【发布时间】:2011-10-16 03:07:36
【问题描述】:
我想在模块中放入一些代码,如果未定义某些方法,则会引发错误。 这个模块依赖于这个方法的外部定义,因为这个方法的实现对于所有的类都是不同的。此代码将帮助开发人员及早知道他们忘记实现该方法,而不是何时尝试使用模块的功能。
module MyModule
def self.included(klass)
raise "MyModule: please `def my_method` on #{klass}" unless klass.respond_to?(:my_method)
end
end
如果未定义方法,我很容易在模块的包含定义中引发错误,但是由于大多数模块都包含在文件的顶部,因此我需要的方法很可能是在类中定义的,但不是在我之前模块包括在内。
class MyClass
include MyModule
def self.my_method
# ...
end
end
这仍然会引发错误:(
只有当方法确实没有在类定义中定义时才可能引发错误?几乎需要一个 class.onload 回调。如果没有,关于如何减轻程序员可能包含我们的模块而不定义此所需方法的可能性的任何其他想法?
【问题讨论】:
标签: ruby module include metaprogramming