2012-10-11 28 views
5

Cách súc tích nhất để đảm bảo ba biến là bằng nhau trong ruby? Ví dụSo sánh ba chiều trong ruby ​​

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

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

Trả lời

11

Cách ngắn gọn nhất cho ba yếu tố là (xin lỗi làm bạn thất vọng):

dog == cat && cat == chicken 

Tất nhiên bạn luôn có thể nhận được thông minh nếu bạn muốn ...

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

... nhưng điều đó không thực sự làm cho mã súc tích hơn (hoặc có thể đọc được).

tôi sẽ làm một cái gì đó như thế này nếu bạn muốn có một chức năng tái sử dụng mà có thể so sánh tùy tiện nhiều yếu tố cho sự bình đẳng:

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

Wow, lẻ. Cảm ơn dù sao đi nữa. – PlankTon

+4

một cách hay để viết 'all_equal?': 'Each_cons (2) .all? {| x, y | x == y} '. – tokland

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

Với số để so sánh:

chó = 'động vật'

cat = 'animal'

chicken = 'animal'

giày = 'quần áo'

Tạo một mảng:

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

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