gpt4 book ai didi

ruby - 在 Ruby 中使用带有参数的 procs/lambdas

转载 作者:太空宇宙 更新时间:2023-11-03 18:25:37 25 4
gpt4 key购买 nike

编辑以包含 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 错误。

这样做的目的是我有各种促销规则(函数)需要在这个购物车对象上运行。可能有更好的方法来存储可以迭代应用于对象实例变量的规则


我有一个 checkout 对象,它包含一个 item 对象的购物车(数组); items 具有属性:codepricename

接下来我有一个 Promotion 对象,它包含 promotional rules 的散列。此散列包含保存这些规则的 Proc 对象(这些规则是每个在购物车对象上运行的函数,会更改购物车的最终价格)。可以通过调用方法并将名称作为参数来添加和删除规则。

我遇到的问题是当我遍历 promotional rules 的散列时。我不知道如何将 cart 对象放入那些 Proc 对象的范围内,以便运行那些 Proc 对象中包含的函数, 改变 cart 状态。

  1. 我是否在创建 Proc/lambda 时传入购物车对象?
  2. Promotion 对象中创建一个 cart 实例变量并设置/获取它?
  3. 以某种方式在 checkout 对象中传递 cart 变量?
  4. 我想得太多或处理问题的方式不正确?

完整的代码很长,所以我将在下面发布一个要点:

https://gist.github.com/3163127

最佳答案

您的规则过程必须接受购物车作为参数,对其进行操作,然后返回修改后的购物车。

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}

关于ruby - 在 Ruby 中使用带有参数的 procs/lambdas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11611721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com