私はJavaのより動的な代替手段を探しているので、Rubyを調べ始めました。定義後に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
今、私はミックスインで同じことをしようとしています:
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
ただし、どのバリアントも期待される結果を生成しません。ところで、期待される結果は次のとおりです。動作を変更するために、クラスAをミックスインで「パッチ」できるようにしたい。同じ動作で複数のクラスに「パッチ」を適用したいので、ミックスインを使用したいと思います。
私がやりたいことをすることは可能ですか?はいの場合、どのように?