我开始研究 Ruby,因为我正在寻找一种更动态的 Java 替代方案。我喜欢在定义后如何在 Ruby 中修改类,例如:
class A
def print
"A"
end
end
class B < A
def print
super + "B"
end
end
class A
alias_method :print_orig, :print
def print
print_orig + "+"
end
end
puts B.new.print # A+B
现在我尝试对 mixins 做同样的事情:
class A
def print
"A"
end
end
class B < A
def print
super + "B"
end
end
module Plus
alias_method :print_orig, :print
def print
print_orig + "+"
end
end
A.extend(Plus) # variant 1
B.extend(Plus) # variant 2
class A # variant 3
include Plus
end
class B # variant 4
include Plus
end
puts B.new.print
然而,没有一个变体产生预期的结果。顺便说一句,预期结果如下:我希望能够使用 mixin 来“修补”类 A,以修改其行为。我想使用 mixins,因为我想“修补”几个具有相同行为的类。
有可能做我想做的事吗?如果是,如何?