SSCEを含むように編集
他のProcと一緒にハッシュに追加するProcオブジェクトがあります。
ten_percent_discount_over_sixty = Proc.new {
cart.each { |item| cart_total += item.price }
if cart_total >= 60.00
cart_total =- cart_total * 0.1
end
}
ご覧のとおり、cart
を含む配列がありますitems
。cart
ただし、インスタンス変数をこのプロシージャのスコープに入れることはできません。したがって、後でrules
別の方法でこれらすべてを繰り返すと、undefined variable
エラーが発生します。
これを行うポイントは、このカートオブジェクトで実行する必要のあるさまざまなプロモーションルール(関数)があることです。rules
オブジェクトインスタンス変数に繰り返し適用できる、より良い保存方法がある可能性があります。
checkout
オブジェクトのカート(配列)を含むオブジェクトがありますitem
。items
属性があります:code
、、。price
name
次にPromotion
、のハッシュを保持するオブジェクトがありますpromotional rules
。このハッシュにはProc
、これらのルールを保持するオブジェクトが含まれています(これらは、カートオブジェクトで実行され、カートの最終価格を変更する関数です)。ルールは、メソッドを呼び出し、引数として名前を使用して追加および削除できます。
私が抱えている問題は、のハッシュを反復処理するときですpromotional rules
。それらのオブジェクトに含まれる関数を実行して状態を変更するために、オブジェクトcart
をそれらのオブジェクトのスコープに入れる方法がわかりません。Proc
Proc
cart
- Proc / lambdaを作成するときにカートオブジェクトを渡しますか?
- オブジェクトにカートインスタンス変数を作成し、
Promotion
設定/取得しますか? checkout
どういうわけか、オブジェクト内のカート変数を渡しますか?- 私は間違った方法で問題を考えすぎているか、アプローチしていますか?
完全なコードはかなり長いので、gist
以下に投稿します。