我有一个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
状态
Promotion
对象中创建购物车实例变量并设置/获取它?checkout
对象中的cart变量?完整代码很长,所以我会在下面发布一个gist
:
答案 0 :(得分:3)
您的规则过程必须接受购物车作为参数,对其采取行动并返回修改后的购物车。
cart = {total: 100}
rules = {ten_percent_discount: lambda{|c| c[:total] *= 0.9; c },
five_percent_discount: lambda{|c| c[:total] *= 0.95; c}}
rules.each do |name, rule|
cart = rule.call cart.dup
end
cart # => {:total=>85.5}