J'ai le code suivant avec un petit bogue, l'instruction de cas renvoie la valeur "Autre" Même si la première instruction "Quand" évalue le vrai et devrait renvoyer "Bateaux".
J'ai cherché À cela depuis des siècles, doit être quelque chose de petit. p> merci! p> p>
3 Réponses :
(Je vais ignorer le fait que votre hachage ne contient aucune des touches que vous vérifiez et prétendez que vous vérifiez que vous vérifiez les clés qui sont réellement dans le hachage. J'espère que c'est le droit hypothèse.) sub> p>
Vous semblez mal comprendre ce que l'instruction code> code> est. Il teste la valeur de l'objet de la déclaration code> code>, pas simplement en cours d'exécution d'un groupe de Ce que vous voulez, c'est plus comme vaguement associé si code> s. Le
quand code> -Clauses sont tous comparés à
=== code> à l'objet de la déclaration code> instruction "/ code>. Donc, si vous écrivez
Catégorie_classes [: Bateaux] .Cluded? (Catégorie_ID) CODE>, puis signifie que
si true === catégorie_id code> ou
si faux === catégorie_id code> (puisque
inclure? code> renvoie true ou false). P>
Catégories.Find {| K, V | v.include? catégorie_id} .first.to_s code>. p>
En réalité, la déclaration de cas rubis a deux formes et l'une des choses est en effet destinée à courir un tas d'IFs vaguement liés. Il avait probablement l'intention d'utiliser l'autre cas de cas, que vous obtenez en suivant le cas directement avec A quand.
A Lorsque vous le regardez dans ce formulaire, vous devriez voir le problème clairement; tandis que Case code> est généralement juste un raccourci pour un
si code> instruction. Vous pouvez être réécrit comme suit:
inclure? code> renvoie un booléen, vous comparez la valeur entière. p> p>
En réalité case code> utilise
=== code>, pas
== code>, mais dans ce cas, la différence n'a pas d'importance.
@ Sepp2k mon mauvais, c'est ce que je voulais écrire.
Vous pouvez développer une matrice dans
L'opérateur de splat est Hawt, bien que cela puisse finir par être moins efficace qu'une déclaration IF.
Je préfère cette belle syntaxe à la réponse acceptée. Aussi concernant @Mikej Commenter Un repère serait bien.
Décidé de faire une référence pour cela. apparemment à l'aide de cas d'expansion du tableau est de 1,5 fois plus lent (testé sur Ruby 2.7.2P137 (2020-10 -01 Révision 5445E04352) [x86_64-Linux] code>)
Il n'y a pas de
: voitures code> étiquette dans votre hachage. Il est donc impossible de retourner "bateaux"