我正在写一个小 gem,我想定义一个类似 DSL 的方法,与desc
and task
中的方法Rake.
Rake 将它们定义为私有方法Rake::DSL
模块然后
self.extend Rake::DSL
将模块混合到主对象中? (我是新手,如有错误请笑)
这样做有什么好处?是因为将这些方法设为私有可以阻止任何其他对象使用它们(即阻止类似some_obj.desc
) ?
如果我定义方法怎么办Kernel
module Kernel
private
include Rake::DSL
end
有什么区别吗?
如果您在中定义私有方法Kernel
模块它将在整个项目中可用。你还将重写desc
项目用来定义 rake 任务的方法。但是,如果您在子模块中编写方法,然后在超类或某个模块中扩展它 - 您可以轻松编写任何类型的 DSL lang,就像您在Rake
or RSpec
.
附:制作方法private
阻止其他模块或类(但不是子类)使用它们(但不覆盖) - 我的意思是模块嵌套层次结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)