Ruby tableau.sélectionnez multiligne bloc
Je suis de filtrage d'un tableau à ruby et à l'aide d'un .select
bloc pour le faire. Les conditions sont suffisamment complexes pour qu'un seul bloc de lignes est hideuse, mais pas que les grandes donc une méthode distincte semble exagéré. Donc je veux utiliser une multiligne bloc. Cependant, je ne suis pas sûr de la syntaxe.
filtered_array = base_array.select do |elem|
return false if condition1
return false if condition2
return true
end
Ci-dessus est clairement erronée, comme return
sort de la méthode, de ne pas le bloquer mais donne une idée de ce que je suis à la recherche d'.
J'ai pu également utiliser plusieurs instructions select, mais qui semble dissimuler ce que je suis en train de faire. Notez que les conditions ci-dessus sont suffisamment complexes pour que l'utilisation d'opérateurs logiques pour lier entre eux les résultats dans un désordre.
voir mon edit s'il vous plaît.
Les blocs de piles ne fonctionnent pas avec l'instruction return (retour serait de retour à partir de la méthode contenant le bloc), sauf s'ils sont lambdas, qui bloque, par défaut, ne le sont pas. La solution à votre cas d'utilisation particulier est celui que Kyle fourni, le général on serait un cas ou de cas comme zététitien fourni, et en général, il suffit de ne pas utiliser l'instruction return pour revenir à partir de blocs, sauf si vous savez qu'ils vont être lambdas, ou transformé en méthodes.
Si vous lisez la question, vous remarquerez que j'ai dit que
return
"est clairement incorrect" et je veux savoir ce qu'il faut utiliser à la place. Kyle la réponse est très compliqué dans le cas que j'utilise. Zététitien de réponse est le plus proche de mon cas d'utilisation, mais ne fonctionne pas dans le cas du composé de l'ifs.OriginalL'auteur AntonDelprado | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
Ce que vous voulez est
next
au lieu dereturn
.return false
mais pas si je veuxreturn true
.next
peut prendre une valeur, tout commereturn
.next(true)
est analogue àreturn(true)
.OriginalL'auteur rcrogers
Edit: Viens de voir ceci: "l'utilisation d'opérateurs logiques pour lier entre eux les résultats dans un désordre."
Pourriez-vous fournir les conditions réelles?
|elem| self.array1.include? elem.name
et l'autre est un peu plus complexeelem.name.include? "some string" && self.other_array.include?(elem.name.sub("some string", "other string"))
OriginalL'auteur Kyle
Semble que cela pourrait être manipulés avec une instruction de cas:
OriginalL'auteur zetetic
Vous devriez probablement utiliser:
Cependant si ce n'est pas jive avec vous, alors ce faire:
OriginalL'auteur Weston Ganger