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

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
Szymon wro (dyskusja | edycje)
Nie podano opisu zmian
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>.
 
<presource>
ruby> class Owoc
| def initialize(r)
| @rodzaj = r
| @stan = "dojrzaly"
| end
| end
 
nil
ruby> o5o = Owoc.new ("mango")
p o #=> "dojrzaly owoc rodzaju: mango"
o2 = Owoc.new #=> ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)
ruby> o6 = Owoc.new
</source>
ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)
</pre>
 
=== Elastyczna inicjalizacja ===
 
WyżejJak wyżej widzimy, że jakgdy 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 użyćargumentom argumentunadać od wtedy, gdy jest on podany, lub wrócić dorazu wartości domyślnych, gdy nie jestdomyślne.
 
<source lang="ruby">
class Owoc
| def initialize(r = "jablko")
| @rodzaj = r
| @stan = "dojrzaly"
| end
end
 
ruby> o5o = Owoc.new ("mango")
p o #=> "dojrzaly owoc rodzaju: mango"
 
ruby> o6o2 = Owoc.new
<pre>
p o2 #=> "dojrzaly owoc rodzaju: jablko"
ruby> class Fruit
</source>
| def initialize(r = "jablko")
| @rodzaj = r
| @stan = "dojrzaly"
| end
| end
nil
ruby> o5 = Owoc.new "mango"
"dojrzaly owoc rodzaju: mango"
ruby> o6 = Owoc.new
"dojrzaly owoc rodzaju: jablko"
</pre>
 
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.