J'ai récemment acheté le livre sept langues en sept semaines em> et avez lu via le chapitre sur Ruby. Dans la section qui introduit des blocs (page 40), un échantillon de code est donné qui illustre l'utilisation de blocs dans le but d'exécuter de manière conditionnelle quelque chose: Ce code n'a pas beaucoup de sens à Moi et le livre ne fournit pas une grande explication. Je me demandais si l'un de vous GURUS GURUS voudriez-vous aider à m'aider à obtenir ma tête autour de celui-ci. P> Comment pouvez-vous avoir un bloc et une fonction avec le même nom? Comment définiriez-vous "d'urgence?" Je ne peux même pas créer le bloc dans l'IRB sans qu'il se plaint: p> et comment voudriez-vous invoquer ce code pour démontrer comment cela fonctionne? Merci! P> p>
3 Réponses :
Tout d'abord: les deux sont dans le mauvais ordre. Vous devez définir secondaire: vous ne nommez pas de blocs; Par conséquent, il est incorrect qu'il y a deux éléments nommés donc, étape par étape: p> Disons que vous avez cette fonction qui renvoie Ceci définit une fonction nommée Notez que Ruby ne nécessite pas de crochets pour l'invocation de la fonction, nous pouvons donc les déposer; et s'il n'y a qu'une seule déclaration à l'intérieur d'un Ensuite, nous avons une invocation de la fonction: p> Ceci appelle la fonction que nous venons de définir, Cela a-t-il plus de sens maintenant? p> p> in_case_of_emergence code> d'abord.
in_case_of_emergence code>. L'une est une définition de la fonction, tandis que la seconde est la fonction
true code> la moitié de l'heure et
false code> la moitié de l'heure, au hasard. (Garçon, c'est beaucoup d'urgences!) Alors: p>
in_case_of_emergence code>. Lorsqu'il est appelé, il exécute
rendement si urgent? Code>, qui est une déclaration
(code> modifiée par le conditionnel
si code>. Il s'agit de sucre syntaxique pour p>
si code>, vous pouvez l'écrire sur la même ligne que ci-dessus (évitant le besoin d'un
fin code>). p>
in_case_of_emergence code>, en passant un bloc à exécuter. Ce sont les deux états (
user_crediting_card code>,
panique code>) qui serait exécuté par
produire code> - mais uniquement si l'urgence code> > Évalue à
true code>. p>
Amadan a raison. @Steve Êtes-vous sûr que le livre a donné le code dans cet ordre?
Oui, c'était l'ordre donné dans le livre.
Je recommande de changer de livres. = / Programmingzen.com/Ruby-and-Rails-Recommendend-Books Une fois que j'ai appris la syntaxe, j'ai le plus appris de la documentation.
C'est simple, c'est la méthode: et c'est l'appel à votre méthode: p> Wheres p > do
use_credit_card
panic
end
Ajout à d'autres réponses, il peut être plus facile de comprendre les blocs si vous déposez le mot clé Code> le mot clé et traitez des blocs dans des procédés tels que les processus qu'ils sont réellement.
# for testing purposes, let's always have `emergency?` return `true` def emergency? true end def in_case_of_emergency(&block) block.call if emergency? end in_case_of_emergency do puts "AHH! Emergency! Help!", "Seriously, I'm freaking out!" end