質問

その動作を、その上向きの実装が多型で実装されていることに応じて、その動作を別の方法の返品値によって変化させるインスタンスメソッドを作成したいと思います。

たとえば、次のクラスが拡張されると想定され、 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top