【问题标题】:Ruby: Method Alias: Child - Parent ClassRuby:方法别名:子类 - 父类
【发布时间】:2014-01-06 01:55:22
【问题描述】:

我有以下几点:

class Parent
  def A
    return 'A'
  end
  def B
    return 'B'
  end
end

class Child < Parent
  def A
    super
    return 'Child.A'
  end
  def B
    super
    return 'Child.B'
  end
end

当我这样做时: p Child.A ==> 孩子.A

然后我在上面的代码下面添加了这个。

class Child < Parent
  alias method_of_child_A A
  def A
    method_of_child_A
  end
end

当我这样做时

p Child.A
=> A

它返回给我'A',而不是'Child.A'。我正在寻找 Child.A. 而且我希望语法也能够执行以下操作。

Class GrandChild < Child
  alias method_of_GrandChild_A A #if Grandchild.A doesn't exist, 
                                 #it will alias Child.A instead.
                                 #Which what alias does basically.
  def A
    method_of_GrandChild_A
  end
end

所以当我这样做时: p 孙子 => 孩子.A

我对别名功能不太熟悉,请问有人能赐教吗?谢谢!

【问题讨论】:

    标签: ruby class methods parent-child alias


    【解决方案1】:

    我相信您的代码已经可以按预期运行:

    require 'pry'
    class Parent
      def A; 'A'; end
      def B; 'B'; end
    end
    
    class Child < Parent
      def A; 'Child.A'; end
      def B; 'Child.B'; end
    end
    
    class Child < Parent
      alias method_of_child_A A
      def A
        method_of_child_A
      end
    end
    
    p Child.new.A #=> "Child.A"
    

    我的修改是为了让代码稍微短一些。

    【讨论】:

    • 如果我希望定义有 super 怎么办?
    • 你可以把它放在那里,它在示例代码中没有做任何事情,所以我把它拔了出来。我不会用一行 def 格式化生产代码 - 只是想简洁。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2014-08-24
    相关资源
    最近更新 更多