我使用了继承,并尝试从子类扩展基类的方法。多态性。基本上,我尝试使用附加选项扩展基本方法(状态)。
但是,由于某种原因,它无法按预期工作。我以为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
答案 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
中的最后一个语句。