Je filtrant des éléments de tableau en rubis et je veux filtrer les positifs, seulement s'ils sont tous des entiers.
l = [1,2,'a','b'] l.select do |number| new_array = [] new_array.push(number) if number.positive? && number.kind_of? Integer end
3 Réponses :
entourez entre parenthèses: qui donne lieu dans Vérification du type d'abord fonctionne: P> méthode non définie "positive?" Pour "A": chaîne code> parce que
positif? code> n'est pas défini pour les chaînes
'a' code> et
'b' code>.
new_array.push(number) if (number.kind_of? Integer) && number.positive?
Ajouter les parens à l'appel de la méthode? numéro.kind_of? (Entier) code>
La méthode code> SELECT CODE> est une méthode de filtrage et nécessite une valeur booléenne décrivant si l'élément doit ou ne doit pas être dans la sortie résultante. Dans ce bloc, vous devriez vous concentrer sur une chose et une chose seulement: décrivant en termes minimaux les critères d'acceptation pour le filtre em>. Ce que vous faites ici est de déclarer une variable locale, de la population conditionnelle , puis jetant la jeter et jetant aussi la sortie résultante. P> Ce que vous voulez vraiment, c'est de le dépouiller sur les bases: p> Don ' t oublier de capturer le résultat de cette opération ou il va directement dans la corbeille. P> Il y a toujours un bug ici car les chaînes n'ont pas de qui nécessite d'ajouter des supports au positif? code> méthode, donc juste inversement La commande: p>
kind_of? code> appelez pour éviter toute ambiguïté.
&& code> est un opérateur très agressif et interprétera l'appel comme ceci s'il n'est pas correctement contenu: p>
juste à côté de la curiosité, la correction de singe Pour l'utilisation de ce type, avec Array # Garder #IF : p> Object Code> Classe:
l.keep_if(&:integer_and_positive?)
#=> [1, 2]