编辑以包括 SSCE
我有一个 Proc 对象,我将它与其他 Procs 添加到 Hash 中:
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
实例变量放入此 proc 的范围内。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
下面发布: