Элегантный синтаксис ruby для возврата большего количества двух объектов
Конечно, есть тысячи способов сделать это, но это самый простой (или самый элегантный) способ достичь этого?
[4,8].max
Это на самом деле не слишком потрепанный, но что бы вы сделали?
Ответ 1
Если вы не хотите создавать массив, там условный оператор:
max = a > b ? a : b
Ответ 2
Именно поэтому Enumerable#max был определен для любого класса, который реализует Comparable. Это определенно самый простой. Чтобы действительно понять, что происходит, вам нужно посмотреть, как он реализован в основной библиотеке вашей любимой реализации Ruby (и, вероятно, оптимизирован).
Ответ 3
Хорошо, я проверил это из любопытства:
#!/usr/bin/env ruby
# -*- mode: ruby -*-
limit = 3000000
tstart_1 = Time.now()
(0..limit).each do |i; a,b, max|
a = rand(9999999)
b = rand(9999999)
max = [a,b].max
end
puts "Array method: #{Time.now() - tstart_1} seconds"
tstart_2 = Time.now()
(0..limit).each do |i; a,b, max|
a = rand(9999999)
b = rand(9999999)
max = (a > b) ? a : b
end
puts "Ternary method: #{Time.now() - tstart_2} seconds"