扩展BaseClass方法(多态)

时间:2015-09-17 07:09:04

标签: ruby oop polymorphism

我使用了继承,并尝试从子类扩展基类的方法。多态性。基本上,我尝试使用附加选项扩展基本方法(状态)。

但是,由于某种原因,它无法按预期工作。我以为B.new.status(1)会返回2而不是nil。

如果我在“y if opt == 2”之后放置超级,则结果是反之亦然。

为什么会这样,我该如何解决这个问题呢?

非常感谢提前!

    class A
      attr_reader :x

      def initialize
        @x = 2
      end

      def status(opt)
        x if opt == 1
      end
    end

    class B < A
      attr_reader :y

      def initialize
        super
        @y = 10
      end

      def status(opt)
        super
        y if opt == 2
      end
    end

    B.new.status(1)
    => nil
    B.new.status(2)
    => 2

2 个答案:

答案 0 :(得分:0)

如果不满足if语句的编码,则返回nil。所以你应该做这样的事情:

if opt == 2
  y
else
  super
end

答案 1 :(得分:0)

这是因为A status中的B status的返回值未被使用A 'x'。是的,在B的状态中,系统会返回status,但super B中不会使用{}。<} / p>

自动返回方法中最后一个语句的结果,但status不是Options +FollowSymLinks -MultiViews -Indexes -MultiViews中的最后一个语句。