ruby – “超级”如何使用模块?
发布时间:2020-12-17 03:22:19 所属栏目:百科 来源:网络整理
导读:我将在一个具体的例子(在Rails中)问它.在“ Destroy without Javascript (revised)”railscast中,Ryan Bates会覆盖#resources路由方法: module DeleteResourceRoute def resources(*args,block) super(*args) do # some code end endendActionDispatch::Rou
我将在一个具体的例子(在Rails中)问它.在“
Destroy without Javascript (revised)”railscast中,Ryan Bates会覆盖#resources路由方法:
module DeleteResourceRoute def resources(*args,&block) super(*args) do # some code end end end ActionDispatch::Routing::Mapper.send(:include,DeleteResourceRoute) 但是Ruby中的继承不是以模块是“超类”的方式工作的.他怎么能从模块中调用#super呢? 如果可以覆盖这样的方法,那么人们而不是这样做: class SomeClass alias old_method method def method # ... old_method # ... end end 可以这样做: class SomeClass include Module.new { def method # ... super # ... end } end 我错过了什么? 解决方法
“超级”只存在于“阶级”语境中.超级无法生活在“纯模块”环境中.所以,当你看到如下代码时:
module DeleteResourceRoute def resources(*args,&block) super(*args) do # some code end end end 你应该有一个“包括这个模块”的类,然后“超级”生效,例如 class SomeClass extends BaseClass include DeleteResourceRoute end class BaseClass def resources puts "called parent!" end end SomeClass.new.resources # => called parent! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |