Hacer una referencia a una variable local de un procine definido en otro alcance

StackOverflow https://stackoverflow.com/questions/5870179

  •  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?

¿Fue útil?

Solución

No esperaría discount_priceLas 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top