加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读