Faisant référence à une variable locale à partir d'un Proc définie dans un autre champ d'application

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

  •  28-10-2019
  •  | 
  •  

Question

Je veux créer une méthode d'instance qui varie son comportement à valeur de retour d'un autre procédé en fonction d'une mise en œuvre des écrasements de façon polymorphique.

Par exemple, la classe suivante est supposée être étendue et pricing_rule est censé changer en fonction d'un produit.

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>

Mais, je deviens une erreur variable locale définie quand je lance ça. Bien que je comprends que l'instance de Proc fait référence à une instance d'achat, je situations similaires rencontrées parfois je dois lieu variable prices en méthode discount_price. Y at-il de façon plus intelligente de se référer à la variable locale dans un appelant d'un Proc?

Était-ce utile?

La solution

J'attendais pas à des variables locales de discount_price soient accessibles à l'intérieur du Proc retourné par pricing_rule. En passant dans prices fonctionnera:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top