10
votes

Équivalent rubis pour Python pour / else

J'ai toujours cherché quelque chose comme de Python tandis que la structure de Python dans Ruby pour améliorer mon code.

Cela signifie que la boucle est exécutée et si la condition de la boucle n'a pas été vraie à tout moment, alors Il renvoie la valeur dans la déclaration d'autre.

dans Ruby, je peux faire comme ça: xxx

y a-t-il un moyen d'améliorer cela? < / p>

Merci d'avance.


0 commentaires

4 Réponses :


3
votes

hm, vous pouvez l'écrire comme ternaire: xxx

Vous pouvez faire quelque chose de plus utile dans votre bloc, car chaque est exécuté pour son effets secondaires et renvoie le récepteur d'origine.

mise à jour selon votre commentaire: Je suppose que le plus proche que vous puissiez obtenir est quelque chose comme xxx


3 commentaires

Je n'aime pas beaucoup sur une ligne. Ce n'est pas plus clair. Ce que je veux, c'est plutôt quelque chose comme tandis que / autre / fin. Peut-être que ce n'est pas possible mais je pense que la question en vaut la peine.


J'ai regardé le de Python tandis que / else maintenant, @zabba a raison, le plus proche est probablement un sauf si..elez si vous n'aimez pas la forme ternaire. IMHO, il n'a pas de sens d'essayer de traduire chaque construct d'une langue à une autre cependant, mais YMMV.


Je n'essayais pas de traduire toute la langue mais je pense que cette structure dans Python est vraiment utile. Merci pour votre réponse :)



29
votes

N'oubliez pas que le bloc d'itérateur renvoie ce que vous avez mis dans celui-ci, ce qui peut être testé pour une utilisation ultérieure.

if arr.each do |item|
  item.some_action(some_arg)
end.empty?
  else_condition_here
end


1 commentaires

Ceci est hideusement génial.



0
votes

une manière plus ou moins fonctionnelle: xxx


0 commentaires

1
votes

Depuis que nous sommes à Ruby, amusons-nous. Ruby a puissant construction , qui pourrait être utilisé tel que ceci: xxx

mais pour faire fonctionner le code ci-dessus, nous devons modifier la classe natale Symbole d'abord. La modification des classes natales est la spécialité rubis. Cela doit être fait une seule fois, typiquement dans une bibliothèque (GEM), et cela vous aide avec jamais. Dans ce cas, la modification sera la suivante: xxx

Ce code surcharge le fonctionnaire Unary moins ( - ) de symbole classe de cette manière, qui dit -: sym renvoie un nouveau singe d'objet vide corrigé avec : === , utilisé dans les coulisses de la déclaration de cas. < / p>


0 commentaires