Quero fazer algo simples e directo, como min(5,10)
, ou Math.max(4,7)
. Existem funções para este efeito em Ruby?
Pode fazer
[5, 10].min
ou
[4, 7].max
Vêm do Módulo Inumerável, pelo que qualquer coisa que inclua Enumerável
terá esses métodos disponíveis.
v2.4 introduz os próprios métodos "Array#min" e "Array#max", que são muito mais rápidos que os métodos Enumerable's porque saltam a chamada "cada um".
**EDIT***
@nicholasklick menciona outra opção, Enumerable#minmax
, mas desta vez devolvendo um conjunto de [min, max]
.
[4, 5, 7, 10].minmax
=> [4, 10]
Pode usar
[5,10].min
ou
[4,7].max
It's um método para Arrays.
Além das respostas fornecidas, se quiser converter Enumerable#max num método máximo que pode chamar um número variável ou argumentos, como em algumas outras linguagens de programação, poderia escrever:
def max(*values)
values.max
end
Produção:
max(7, 1234, 9, -78, 156)
=> 1234
Isto abusa das propriedades do operador splat para criar um objecto de matriz contendo todos os argumentos fornecidos, ou um objecto de matriz vazio se não forem fornecidos argumentos. Neste último caso, o método retornará 'nada', uma vez que chamar Enumerable#max sobre um objecto de matriz vazia retorna 'nada'.
Se quiser definir este método no módulo Matemática, isto deve fazer o truque:
module Math
def self.max(*values)
values.max
end
end
Note-se que Enumerable.max é, pelo menos, duas vezes mais lento em comparação com o operador ternário (?:
). Ver Dave Morse's answer para um método mais simples e mais rápido.