Chcę użyć min(5,10)
lub Math.max(4,7)
. Czy są funkcje tego efektu w Ruby?
ruby
enumerable
obuzek
źródło
źródło
std::max(4, 7)
ma więcej „interpunkcji” niż[4, 7].max
?std::max
można je zaimportować do przestrzeni nazw, aby po prostu się stałomax(4, 7)
. Czekać; patrząc wyżej widzę, że już to powiedziałem.Możesz użyć
lub
To metoda tablic.
źródło
Wszystkie te wyniki generują śmieci w gorliwej próbie obsłużenia więcej niż dwóch argumentów. Byłbym ciekawy, jak wypadają w porównaniu z dobrym „olem”:
tak przy okazji, moja oficjalna odpowiedź na twoje pytanie.
źródło
[a,b].max
, ale nadal nie jest jasne, czy jest szybsze niż powyższa implementacja. blog.bigbinary.com/2016/11/17/…Jeśli chcesz znaleźć maks / min skrótu, możesz użyć
#max_by
lub#min_by
źródło
Oprócz podanych odpowiedzi, jeśli chcesz przekonwertować Enumerable # max na metodę max, która może wywoływać zmienną liczbę lub argumenty, jak w niektórych innych językach programowania, możesz napisać:
Wynik:
Narusza to właściwości operatora splat do tworzenia obiektu tablicowego zawierającego wszystkie podane argumenty lub pustego obiektu tablicowego, jeśli nie podano argumentów. W drugim przypadku metoda zwróci
nil
, ponieważ zwracane jest wywołanie Enumerable # max na pustym obiekcie tablicynil
.Jeśli chcesz zdefiniować tę metodę w module Math, powinno to załatwić sprawę:
Zauważ, że Enumerable.max jest co najmniej dwa razy wolniejszy w porównaniu do operatora trójskładnikowego (
?:
) . Zobacz odpowiedź Dave'a Morse'a na prostszą i szybszą metodę.źródło
źródło