Hacer una referencia a una variable local de un procine definido en otro alcance
-
28-10-2019 - |
Pregunta
Quiero crear un método de instancia que varíe su comportamiento con el valor de retorno de otro método dependiendo de una implementación de sus sobrescrituras de manera polimórfica.
Por ejemplo, se supone que la siguiente clase se extiende y pricing_rule
se supone que cambia dependiendo de un producto.
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>
Pero, recibo un error variable local indefinido cuando ejecuto esto. Aunque entiendo que la instancia de Proc se refiere a una instancia de compra, a veces encontré situaciones similares que necesito colocar prices
Variable en el método descuento_price. ¿Hay alguna forma más inteligente de referirse a la variable local en una persona que llama de un proceso?
Solución
No esperaría discount_price
Las variables locales para ser accesibles dentro del Proc
devuelto por pricing_rule
. Paso prices
en el trabajo:
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