ポリモーフィックな方法で上書きの実装に応じて、別のメソッドの戻り値で動作を変化させるインスタンス メソッドを作成したいと考えています。
たとえば、次のクラスは拡張されると想定されpricing_rule
ており、製品によって変更されることになっています。
class Purchase
def discount_price
prices = [100, 200, 300]
pricing_rule.call
end
protected
def pricing_rule
Proc.new do
rate = prices.size > 2 ? 0.8 : 1
total = prices.inject(0){|sum, v| sum += v}
total * rate
end
end
end
Purchase.new.discount_price
#=> undefined local variable or method `prices' for #<Purchase:0xb6fea8c4>
しかし、これを実行すると、未定義のローカル変数エラーが発生します。Proc のインスタンスが Purchase のインスタンスを参照していることは理解していますが、prices
変数を discount_price メソッドに配置する必要がある同様の状況に遭遇することがありました。Proc の呼び出し元でローカル変数を参照するスマートな方法はありますか?