Wydaje mi się , że “wszystko” dziedziczy po Object, do którego włączany jest Kernel.[/quote]
Dlatego napisałem, że w uproszczeniu. Nie zawsze szczegóły są ważne
[quote]Przecież możesz użyć metody z duża literą:
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/[/quote]
Ja wiem, że mogę. Chodziło mi o to, czy ktoś widzi jakieś ważne powody, żeby poświęcić czytelność kodu (przez unikanie tego “confusion”) na rzecz pozbycia się paru znaków.
Czy uważasz, że ten skrót w składni jest tego wart?
[quote]Masz kilka takich metod w Kernelu, jak String, Array itp. Pozwala to na stworzenie “skrótu” w składni dla tworzenia obiektów tego typu.
Zobacz przykład:
[1, 2, 3].map(&:to_s)
a teraz w drugą stronę
["1", "2", "3"].map(&method(:Integer))
http://andrewjgrimm.wordpress.com/2011/10/03/in-ruby-method-passes-you/[/quote]
Ja bym napisał
["1","2","3"].map(&:to_i)
Chyba bardziej czytelne.
A jeśli rzeczywiście potrzebne by było coś bardziej złożonego, to raczej bym zdefiniował “normalną” metodę w klasie, albo użyłbym “normalnego” bloku.
["1","2","3"].map {|i| Integer.new(i)}
Też 100x bardziej czytelne.
Tak więc, gdzie zysk z takich funkcji? Nie warto, czy po prostu czegoś nie dostrzegam? Na razie wychodzi mi, że rzeczywiście nie ma w tym jakichś ukrytych super plusów i definiując takie funkcje ludzie po prostu przeginają nieco z mikrooptymalizacją.