首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby self.inherited alias_method

ruby self.inherited alias_method
EN

Stack Overflow用户
提问于 2017-02-03 18:51:31
回答 1查看 328关注 0票数 0
代码语言:javascript
复制
class Base
  def sam
    "I m the base"
  end

  def self.inherited(base)
    alias_method :old_sam, :sam
    base.class_eval do
      def sam
        old_sam 
        p "Inside inherited"
      end
    end
    super
  end
end

class Derived < Base
  def sam
   p "Inside Derived"
  end
end

当Derived.new.sam =>“内部派生”时

但我希望

“内部派生”

“内部继承”

ruby新手。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2017-02-03 19:02:37

您只需覆盖Derived中由base.class_eval方法sam定义的。

如果从Derived中删除方法sam

代码语言:javascript
复制
class Derived < Base
end

您将获得:

代码语言:javascript
复制
#=> "Inside inherited"
#=> ArgumentError: wrong number of arguments (given 1, expected 0)

后者是因为您向old_sam方法传递了一个参数,而该方法不接受该参数:

代码语言:javascript
复制
old_sam p "Inside inherited"

,但我希望

“内部派生”

“内部继承”

对于您的设置来说,这是不可能的,因为您要做的是首先在class_eval块中为所有下行类定义一个实例方法sam,然后在中覆盖它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42022520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档