Ruby/Inicjalizacja obiektów: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Nie podano opisu zmian
 
Linia 7:
Ilekroć Ruby tworzy nowy obiekt, szuka metody nazwanej <tt>initialize</tt> i wykonuje ją. Tak więc najprostszą rzeczą, którą możemy zrobić jest użycie metody <tt>initialize</tt>, by przypisać domyślne wartości do wszystkich zmiennych instancji.
 
<sourcesyntaxhighlight lang="ruby">
class Owoc
def initialize
Linia 17:
o = Owoc.new
p o #=> "dojrzaly owoc rodzaju: jablko"
</syntaxhighlight>
</source>
 
=== Zmiana założeń w wymagania ===
Linia 23:
Będą takie przypadki, że domyślna wartość nie będzie miała wielkiego sensu. Czy jest w ogóle coś takiego jak domyślny rodzaj owocu? Bardziej pożądanym może być wymaganie, by każdy kawałek owocu posiadał swój własny rodzaj określony podczas tworzenia. By zrobić to, możemy dodać formalny argument do metody <tt>initialize</tt>. Z powodów, w które nie będziemy się teraz zagłębiać, argumenty które przekazujesz do metody <tt>new</tt> są dostarczane do <tt>initialize</tt>.
 
<sourcesyntaxhighlight lang="ruby">
class Owoc
def initialize(r)
Linia 34:
p o #=> "dojrzaly owoc rodzaju: mango"
o2 = Owoc.new #=> ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)
</syntaxhighlight>
</source>
 
=== Elastyczna inicjalizacja ===
Linia 40:
Jak wyżej widzimy, gdy tylko argument dołączony jest do metody <tt>initialize</tt>, nie można go opuścić bez generowania błędu. Jeśli chcemy nieco bardziej dbać o użytkownika, możemy argumentom nadać od razu wartości domyślne.
 
<sourcesyntaxhighlight lang="ruby">
class Owoc
def initialize(r = "jablko")
Linia 53:
o2 = Owoc.new
p o2 #=> "dojrzaly owoc rodzaju: jablko"
</syntaxhighlight>
</source>
 
Wartości domyślnych możesz używać dla każdej metody, nie tylko <tt>initialize</tt>. Lista argumentów musi być tak ustawiona, by argumenty z domyślnymi wartościami były podawane jako ostanie.