51 votes

Quand utiliser une lambda en Ruby on Rails?

Quand un lambda ou proc être utilisé? Je les ai vus décrit comme des fonctions anonymes, mais j'ai du mal à comprendre ce concept. Je vous serais reconnaissant de tous les liens vers des exemples de quand vous pouvez utiliser l'un en Ruby, mais surtout en Ruby on Rails.

44voto

August Lilleaas Points 25812

http://augustl.com/blog/2008/procs_blocks_and_anonymous_functions/ a une de ce que les blocs de/proc/lambdas sont, comment vous pouvez les utiliser, et comment ils se comparent à des fonctions dans d'autres langues. Il a certainement des réponses à votre question.

Soyez conscient que la dernière section, "note sur les lambdas' mentionne un point qui n'est vrai que dans Ruby 1.8 et a changé de 1,9 - Ruby: Proc.nouveau { 'gaufres' } vs proc { 'gaufres' }

12voto

ehsanul Points 3103

Je ne vois pas où vous faites la distinction entre Ruby on Rails et Ruby. Si vous êtes à la rédaction d'un Ruby on Rails application, vous écrivez du code Ruby, donc si c'est utile en Ruby, il devrait être utile dans Ruby on Rails.

De toute façon, cet article, Quelques Fermetures en Ruby, doit être utile, ainsi qu'à ceci: http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/

9voto

ez. Points 3836

C'est un morceau de code qui permet de passer partout.

Il est particulièrement utile dans named_scope, il permet de vous faire quelque chose comme ceci:

named_scope :scoped_by_user, lambda {|user| {:conditions=>{:user_id=>user.id}}}

Disons que vous avez un modèle de Projet et vous souhaitez obtenir tous les projets pour un utilisateur particulier, vous pouvez faire quelque chose comme ceci:

Project.scoped_by_user(123)

7voto

sudonim Points 41

Lorsque j'ai vu Lambda utilisé est en phase de test...

lambda do
    post :create, :user => @attr
end.should_not change(User, :count)

Lambda vous permet d'avoir le test à la fin pour s'assurer que le code exécuté dans le lambda bloc ne pas changer le nombre d'Utilisateurs.

4voto

ErsatzRyan Points 1850

lambda est exceptionnellement utile en named_scope, de sorte que vous pouvez passer des paramètres à l' named_scopes.

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