SimpleDelegator
基になるオブジェクトを変更せずにポリモーフィズムを活用するための代替手段は何ですか。
これは例であり、SimpleDelegator
解決しない問題です。
目的は、元のオブジェクト ( delicious_food
) を他の ( ) でラップしyak_food
て、置換されたメソッド ( delicious?
) が基になるオブジェクトの非置換メソッドに依存するようにすることです。
class Food
def initialize(color)
@color = color
end
def delicious?
color == :red
end
def color
@color
end
end
class FoodTasteOverride < SimpleDelegator
def color
:green
end
end
delicious_food = Food.new(:red)
yak_food = FoodTasteOverride.new delicious_food
delicious_food.delicious? # true - expected
yak_food.delicious? # expecting false, but is true since the color come from delicious_food
代替方法を実際に使用する代替手段は何ですか? 制約は、基になるオブジェクト、そのクラス、またはクローンを変更できないことです。
制約は、これを行うことができないことを意味します:
yak_food = delicious_food.clone
def yak_food.color
:green
end