J'ai du mal à imaginer une utilisation pratique pour Procs et Lambda dans une application web. Quelqu'un at-il un exemple d'une situation dans votre code où ils sont utiles?Quel est un exemple de quand vous utilisez un Proc ou Lambda dans une application web Ruby?
Répondre
Pourquoi dans les webapps en particulier? Voulez-vous dire le cadre Ruby on Rails, peut-être?
Les processus et les lambdas sont utiles lorsque vous souhaitez stocker des parties de code de manière anonyme. Procs et lambdas sont très similaires aux méthodes, sauf qu'ils n'ont pas de nom. Un bon exemple pour illustrer cela, dans ActiveRecord/Rails:
// methods are named
validates_presence_of :foo, :if => :active?
// procs aren't
validates_presence_of :foo, :if => proc {|r| do_stuff }
I général, procs sont utilisés pour callbacks et crochets, de sorte que vous n'avez pas à écrire des méthodes nommées et les consulter, mettre le code question directement dans les hachages d'option et autres. Vous pouvez trouver this article utile.
je les utiliser sur les champs nommés:
named_scope: dernière, lambda {| quantité | {: Order => "created_at DESC",: limit => quantité}}
Pour créer un moyen facile d'obtenir les derniers messages numériques, commentaires, etc.
Maintenant, je peu il triché, il est plus d'une chose cadre que d'une "application web", mais je ne peux pas penser que l'application web est si différente des autres applications de bureau. Les deux procs et Lambdas vous permettent de "sauver" le code pour une utilisation ultérieure, et peuvent aider à utiliser le comportement, utiliser plus de méthodes "orientées domaine" et nettoyer un peu plus de "code régulier"
L'utilisation de lambda ou proc est une question de style de programmation appelée programmation fonctionnelle. Il y a plusieurs interfaces Rails où vous voudrez peut-être passer un objet bloc (lambda ou PROCC), tout comme validations:
class Person < ActiveRecord::Base
validates_acceptance_of :terms_of_service :if => Proc.new { |user| user.signup_step > 2 }
end
Vous pouvez concevoir des interfaces comme ça, où vous pouvez donner à l'utilisateur le choix de passer un nom de méthode (symbole) ou un objet proc (ou lambda) pour spécifier une certaine logique.
Un autre endroit dans Rails par exemple est où vous pouvez définir layouts dynamiquement:
class WeblogController < ActionController::Base
layout proc{ |controller| current_user.logged_in? ? "writer_layout" : "reader_layout" }
end
De toute évidence, procs et lambdas sont un élément essentiel de tout ce qui concerne les callbacks, mais dans la plupart des cas en ruby cela peut être accompli avec un bloc.
Un endroit où les procs ou lambdas sont utiles et qui n'est pas lié aux callbacks est comme compiler une expression régulière. Bien sûr, regex fait partie du langage, donc vous n'avez pas besoin de procs pour cela, mais vous pouvez vous retrouver à écrire un autre type de procédure qui a un coût unique qui peut être réutilisé, mais qui ne vaut pas vraiment la peine d'être créé une classe complète.
Dans mon cas, j'avais un objet (publist) qui contenait une liste de chaînes. Dans une zone du code, j'avais besoin de vérifier à plusieurs reprises si un autre ensemble avait des membres dans cette liste. Cela aurait été gênant et aurait eu de mauvaises performances pour changer le type de données afin que l'objet contienne un ensemble. Donc ce que j'ai fait était de créer une méthode qui renvoyait un matcher lambda qui avait une représentation locale de cette liste.
J'aurais pu renvoyer un ensemble, mais la logique métier de savoir si un élément correspondait logiquement appartenait au publist.Je pourrais à l'avenir changer cela pour prendre en charge des sous-chaînes ou des expressions régulières et les utilisateurs du matcher auraient toujours la même API.
- 1. Comment créer un bloc réutilisable/proc/lambda dans Ruby?
- 2. Quand utilisez-vous un alias de méthode?
- 3. Quel genre de mathématiques utilisez-vous dans votre application .NET?
- 4. Lambda Exemple
- 5. Comment utilisez-vous Machine.config, ou êtes-vous?
- 6. Quel onglet léger JS avec un bon design utilisez-vous?
- 7. Quand utilisez-vous des blocs de code?
- 8. .net Déterminez au moment de l'exécution si mon application est un exe ou une application Web
- 9. Quel outil utilisez-vous pour construire un programme Erlang?
- 10. Comment utilisez-vous un partiel dans un modèle de présentation?
- 11. De quelle manière utilisez-vous les expressions C# Lambda?
- 12. Comment utilisez-vous un curseur de souris personnalisé dans une application .NET?
- 13. comment convertir des chaînes comme "ceci est un exemple" en "ceci est un exemple" sous ruby
- 14. Déterminer quand un service Web est disponible
- 15. Streaming, Daemons, Cronjobs, comment les utilisez-vous? (en Ruby)
- 16. Quel est un bon moyen de générer des rapports de disponibilité pour une application Web?
- 17. Appeler un proc stocké dans un proc stocké
- 18. Comprendre le comportement d'injection utilisé avec un lambda dans Ruby
- 19. Pouvez-vous insérer/mettre à jour en utilisant une fonction .NET ou un service Web lorsque vous utilisez Entity Framework?
- 20. Évitez l'objet object_id lorsque vous utilisez andand dans Ruby 1.9?
- 21. Dans MVC, quand utilisez-vous <%= %> et <% %>?
- 22. Un exemple de tableaux utilisés dans le développement web
- 23. Comment consommer un service web json ou xml dans Rails ou Ruby?
- 24. Comment utilisez-vous une variable dans xsl lorsque vous essayez de sélectionner un nœud?
- 25. Vous cherchez un exemple de cocotron
- 26. Ruby méthode, Proc, et la confusion de bloc
- 27. Quel mot utilisez-vous pour décrire un objet de type JSON?
- 28. Quel est l'avantage de faire une application Sinatra/Rack dans un seul fichier exécutable localement?
- 29. utilisez-vous Heroku pour écrire l'application Ruby on Rails?
- 30. Quand obtiendriez-vous un 404 quand une page existe réellement?
Merci pour le lien. Non, je ne voulais pas dire ROR. Je voulais juste dire des exemples typiques de tous les jours où vous pourriez utiliser procs/lambdas - comme dans les applications web. Désolé si je n'étais pas clair. – uzo