2010-07-14 3 views
0

Alors peut-être que j'ai tout faux, mais je suis sûr qu'il y a un moyen de le faire, disons que j'ai un if déclaration, que je veux retourner true si toutes les conditions dans un tableau évaluer comme vrai.ruby, l'évaluation de plusieurs conditions dans un tableau

dire que j'ai ceci:

def real_visitor?(location, request, params) 

    valid_location = [ 
    params['referrer'] == 'us', 
    params['bot'] != 'googlebot', 
    5 + 5 == 10 
    ] 

    if valid_location 
    return true 
    else 
    return false 
    end 
end 

Comment puis-je évaluer chacune des conditions dans le tableau valid_location, certaines de ces conditions dans ce tableau sont juste pseudocode.

Répondre

4

Utilisez Array#any? ou Array#all?. C'est comme mettre l'opérateur || ou && entre toutes vos conditions, mais il ne fait pas d'évaluation de court-circuit, ce qui est parfois utile.

return valid_location.all? 

Vous n'avez pas besoin du mot-clé return, au fait. Je le laisserais tomber.

+0

En IRM 1.8.7, court-circuit 'all?' Et 'any?': Tout s'arrête à la première valeur falsifiée; 'any?' s'arrête à la première valeur véridique. –

+0

Eh bien, un exemple de ce que je veux dire, c'est que [puts ("1"), puts ("2")] all? 'Afficherait" 1 "et" 2 ", mais' puts ("1") && puts ("2") 'ne ferait qu'imprimer" 1 ", même si la sémantique est la même. Les éléments du tableau sont en cours d'évaluation * avant l'appel de 'tout?'. –

+0

Cela prend tout son sens. Merci pour l'excellente explication. –

Questions connexes