32 votes

Validation des rails: if => Proc.new ou lambda?

J'ai constaté que dans tous les exemples incluent les rails de la documentation), que j'ai vu pour l' :si l'option de validation des méthodes utilise Proc.de nouveau au lieu de lambda, par exemple

class Foo < ActiveRecord::Base
  validates_presence_of :name, :if => Proc.new{|f| .... } # why not lambda here?
end

est-il une raison pour cela? Autant que je sache, lambda

  1. Est plus stricte avec des arguments.
  2. Aussi l'instruction de retour en lambda bloc de revient de l'immeuble, pas de fonction d'appel.

Les deux semble être souhaitable de comportement :si l'option mentionnée ci-dessus, est-ce que je suis absent?

Merci!

36voto

Jits Points 5595

Les deux semblent être un comportement souhaitable pour: si l'option mentionnée ci-dessus, y a-t-il quelque chose qui me manque?

Je suppose que:

Il est plus souhaitable d'autoriser les Procs car ils ne se soucient pas du nombre d'arguments. Je pourrais donc facilement écrire l'un des éléments suivants:

 validates_presence_of :name, :if => Proc.new{|f| f.display_name.blank? }    # I care about 'f' here as I need it to check something.
 

... et:

 validates_presence_of :secret_sauce, :if => Proc.new{ MyApp::REQUIRE_SECRET_SAUCE }    # I don't care about any arguments being passed in.
 

Cela peut sembler être une chose mineure, mais je suppose que cela ajoute à la flexibilité.

7voto

Gagan Points 1327

Pour plus de détails sur le fonctionnement de lambda Proc.new et proc, consultez ce lien.

http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/

Cette page Web donne une meilleure compréhension des trois ci-dessus avec de bons exemples.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X