Przekazywanie argumentów do metody i dodawanie metod do klasy

Witam,
przeglądam przykłady z książki Ruby Receptury i natknąłem się na taki przykład:

[code]class String
def word_count
frequencies = Hash.new(0)
downcase.scan(/\w+/) { |word| frequencies[word] += 1 }

return frequencies

end
end

fr1 = %{Dogs dogs dog dog dogs.}.word_count
fr1.each_key { |item| puts “#{item} => #{fr1[item]}” }[/code]
Powyzszy przyklad zlicza wyrazy w stringu. Mam 2 pytania odnośnie powyzszego kawalka kodu:

  1. Czy stworzenie klasy String tak jak wyżej po prostu rozszerza klasę String o dodatkową metodę word_count ?
  2. Jak to się dzieje, że w definicji metody word_count nie widac aby przyjmowala ona jakiekolwiek argumenty a jednak jakos program dziala. Skąd metoda ‘downcase’ wie co jest jej argumentem ?

edit:
Odnosnie moich pytan:
Ad1. Tak wlasnie jest
Ad2. downcase wywolywana jest na rzecz obiektu ‘self’ ? (to samo co w javie this ?) I self jest domyslnie i dlatego nie trzeba pisac self.downcase … Metoda ‘downcase’ moze byc wywolana wlasnie przez self.downcase lub po prostu downcase dlatego ze odpowiedz na pytanie 1 jest TAK.

czy dobrze sobie odpowiedzialem na swoje pytania ?

Dobrze odpowiedziałeś :slight_smile:

A teraz odstaw tę książkę i weź jakąś dobrze wprowadzającą w podstawy Ruby - np. książkę z kilofem, bo chcesz się brać za praktykę nie poznawszy wcześniej teorii :stuck_out_tongue:

nie wiem co to ksiazka z kilofem …
Co do odstawienia ksiazki to jej chyba nie odstawie :wink: No chyba ze pozniej sie zacznie dopiero jazda. Przeczytalem Tutorial z wikibooks i opis Ruby z ksiazki do ruby on rails wiec nie wiem czy to mi umknelo czy co ale odpowiedz dostalem wlasnie z ksiazki receptury z nastepnego przykladu (a raczej podpowiedz gdy zobaczylem slowko ‘self’ i mi sie juz wszytko w glowie dopasowalo jak to prawdopodobnie jest). Czesto tak mam ze na nastepnej stronie jest odpowiedz a ja glowie sie i troje zeby zrozumiec glupi kawalek kodu.

dzieki :slight_smile:

@grzesiek6:
==> strona do wydawnictwa ksiązki z kilofem http://www.pragprog.com/titles/ruby/programming-ruby (w Polsce dostępne tłumaczenie)
==> pierwsze wydanie online: http://www.rubycentral.com/book/

Zauważyłem, że właśnie pojawiło się tłumaczenie "The Ruby Programming Language " - http://helion.pl/ksiazki/rubypr.htm - sam tylko przeglądałem oryginalną wersję, ale doszły mnie słuchy, że podobno lepsza od kilofa. W sumie Matz jest współautorem, więc coś w tym może być.

Ta książka jest świetna jak się już coś umie programować. Bez lania wody, po prostu konkrety. Także polecam.