2012-10-11 9 views
5

¿Cuál es la forma más concisa de garantizar que tres variables sean iguales en rubí? Por ejemploComparación tripartita en ruby ​​

dog = 'animal' 
cat = 'animal' 
chicken = 'animal' 
shoe = 'clothing' 

# Something like this...which doesn't work 
dog == cat == chicken # true 
dog == cat == shoe # false 

Respuesta

11

La forma más concisa para tres elementos es (lo siento decepcionarte):

dog == cat && cat == chicken 

Por supuesto, siempre se puede obtener inteligente si desea ...

[dog, cat, chicken] == [dog] * 3 
[dog, cat, chicken].uniq.length == 1 

... pero eso realmente no hace que el código sea más conciso (o legible).

me gustaría hacer algo como esto si quieres una función reutilizable que se pueda comparar arbitrariamente muchos elementos para la igualdad:

def all_equal?(*elements) 
    elements.all? { |x| x == elements.first } 
end 
+0

Wow, impar. Gracias de todos modos. – PlankTon

+4

una buena manera de escribir 'all_equal?': 'Each_cons (2) .all? {| x, y | x == y} '. – tokland

2
dog == cat && dog == chicken 
0

números dados para comparación:

perro = 'animal'

cat = 'animal'

chicken = 'animal'

zapatos = 'ropa'

Crear una matriz:

arr = [dog, cat, chicken, shoe] 
arr_length = arr.reject { |a| a != dog }.length 

if arr_length == 0 
puts "All numbers are equal" 
end 
Cuestiones relacionadas