Eu quero usar min(5,10)
, ou Math.max(4,7)
. Existem funções para esse efeito no Ruby?
ruby
enumerable
obuzek
fonte
fonte
std::max(4, 7)
tem mais "pontuação" do que[4, 7].max
?std::max
pode ser importado para o seu espaço para nome, então ele se tornamax(4, 7)
. Esperar; olhando para cima, eu já disse isso.Você pode usar
ou
É um método para matrizes.
fonte
Todos esses resultados geram lixo em uma tentativa zelosa de lidar com mais de dois argumentos. Eu ficaria curioso para ver como eles se saem em comparação com o bom:
que é, a propósito, a minha resposta oficial à sua pergunta.
fonte
[a,b].max
, mas ainda não está claro se é mais rápido que a implementação acima. blog.bigbinary.com/2016/11/17/…Se você precisar encontrar o máximo / min de um hash, poderá usar
#max_by
ou#min_by
fonte
Além das respostas fornecidas, se você quiser converter Enumerable # max em um método max que possa chamar um número ou argumentos variáveis, como em algumas outras linguagens de programação, você pode escrever:
Resultado:
Isso abusa das propriedades do operador splat para criar um objeto de matriz que contenha todos os argumentos fornecidos ou um objeto de matriz vazio se nenhum argumento for fornecido. Neste último caso, o método retornará
nil
, pois a chamada Enumerable # max em um objeto de matriz vazio será retornadanil
.Se você deseja definir esse método no módulo Math, faça o seguinte:
Observe que Enumerable.max é, pelo menos, duas vezes mais lento em comparação com o operador ternário (
?:
) . Veja a resposta de Dave Morse para um método mais simples e rápido.fonte
fonte