別の範囲で定義されたProcからローカル変数を参照する
-
28-10-2019 - |
質問
その動作を、その上向きの実装が多型で実装されていることに応じて、その動作を別の方法の返品値によって変化させるインスタンスメソッドを作成したいと思います。
たとえば、次のクラスが拡張されると想定され、 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のインスタンスが購入のインスタンスを指していることを理解していますが、私は時々私が配置する必要がある同様の状況に遭遇しました prices
VariableはDiscount_Priceメソッドになります。 PROの発信者のローカル変数を参照するよりスマートな方法はありますか?
解決
私は期待しません discount_price
内部でアクセスできるローカル変数 Proc
によって返されます pricing_rule
. 。通過 prices
Will Work:
class Purchase
def discount_price
prices = [100, 200, 300]
pricing_rule.call prices
end
protected
def pricing_rule
Proc.new do |prices|
rate = prices.size > 2 ? 0.8 : 1
total = prices.inject(0){|sum, v| sum += v}
total * rate
end
end
end
所属していません StackOverflow