gpt4 book ai didi

ruby - 从另一个作用域中定义的 Proc 引用局部变量

转载 作者:数据小太阳 更新时间:2023-10-29 07:57:36 24 4
gpt4 key购买 nike

我想创建一个实例方法,它根据以多态方式覆盖的实现,根据另一个方法的返回值改变其行为。

例如,假设下面的类被扩展并且 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 的实例是指 Purchase 的实例,但我有时会遇到类似的情况,我需要将 prices 变量放入 discount_price 方法中。有没有更聪明的方法来引用 Proc 的调用者中的局部变量?

最佳答案

我不希望 discount_price 的局部变量可以在 pricing_rule 返回的 Proc 中访问。传递 prices 将起作用:

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

关于ruby - 从另一个作用域中定义的 Proc 引用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5870179/

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