2012-10-11 12 views
5

Jaki jest najbardziej zwięzły sposób zapewnienia, że ​​trzy zmienne są równe w rubinie? Na przykładTrójdrożne porównanie w rubinie

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

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

Odpowiedz

11

najbardziej zwięzły sposób dla trzech elementów jest (przepraszam cię rozczarować):

dog == cat && cat == chicken 

Oczywiście zawsze można dostać mądry, jeśli chcesz ...

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

... ale to naprawdę nie czyni kodu bardziej zwięzłym (lub czytelnym).

chciałbym zrobić coś takiego, jeśli chcesz wielokrotnego użytku funkcji, które można porównać arbitralnie wiele elementów służących do równości:

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

Wow, dziwne. Dzięki i tak. – PlankTon

+4

fajny sposób na napisanie 'all_equal?': 'Each_cons (2) .all? {| x, y | x == y} '. – tokland

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

podanych liczb dla porównania:

psa = „zwierzę”

kot = "zwierzę"

kurczak = "zwierzę"

butów = 'odzież'

Tworzenie tablicy:

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

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