2010-03-13 7 views
20

Por supuesto, hay mil maneras de hacerlo, pero ¿es la manera más simple (o más elegante) de lograr esto?Sintaxis elegante de rubí para devolver el mayor de dos objetos

[4,8].max 

De hecho, no está nada mal, pero ¿qué harías?

+0

Sin duda es muy simple, pero la definición y la matriz sobre la marcha de esta manera no se siente tan bien. – doctororange

+2

Para mí, la sintaxis de matriz es más clara que la sintaxis ternaria. –

+0

Pero esto es más SECO que la sintaxis ternaria – ryan0

Respuesta

26

Si no desea generar una matriz, está el operador condicional:

max = a > b ? a : b 
10

Por eso exactamente Enumerable#max se ha definido para cualquier clase que implemente Comparable. Definitivamente es el más simple. Para realmente entender lo que está sucediendo, necesitaría ver cómo se ha implementado en la biblioteca principal de su implementación Ruby favorita (y probablemente esté optimizado).

+0

Esta respuesta podría beneficiarse mediante el suministro de un ejemplo específico –

+3

La respuesta es que el ejemplo en la pregunta es correcto; no necesita otro ejemplo. – Braiba

10

Está bien, he probado esto por curiosidad:

#!/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" 

Salida:

matriz Método: 1.746134 segundos

Método ternario: 1.002226 segundos

+0

La mina era 'Ternary: 1.452967' y' Array: 3.147474'. Definitivamente yendo por el ternario :) – m93a

Cuestiones relacionadas