Подтвердить что ты не робот

Элегантный синтаксис ruby ​​для возврата большего количества двух объектов

Конечно, есть тысячи способов сделать это, но это самый простой (или самый элегантный) способ достичь этого?

[4,8].max

Это на самом деле не слишком потрепанный, но что бы вы сделали?

4b9b3361

Ответ 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"

Вывод:

Метод массива: 1.746134 секунды

Тернарный метод: 1.002226 секунд