使用Ruby 2.0。这是我的代码:
module Test
class A
def initialize(x)
@x = x
foo
end
def foo
p @x
update(@x) # only if it's a Test::C object or called from Test::C
end
end
end
module Test
class B < A
def foo
@x += 2
super
end
end
end
module Test
class C < A
def foo
@x += 1
super
end
end
end
def update(x)
if x > 100
Test::B.new(x)
else
Test::C.new(x)
end
end
x = 100
update(x)
这是我想要实现的目标:
在Test::A#foo
中,update(@x)
只有在Test::C#foo
或其Test::C
对象调用时才会被调用。 < / p>
首次调用update(x)
x = 100
,因此操作应+1
,然后转到Test::B#foo
一次。我如何实现这一目标?
答案 0 :(得分:1)
父类不应该关心子类。你在这里设计的这种设计意味着它需要知道,它被打破并使事情过于复杂。
无论如何,如果你确实需要陷入某些情况:
case (self)
when Test::A, Test::B
# ... Do stuff
update(@x)
end
如果Test::A
和Test::B
关心该操作,他们应该在必要时调用它:
def foo
@x += 1
super
update(x)
end