Следуя документации Ruby рассмотрим пример простого класса :
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
Название класса начинается с заглавной буквы, а методы с маленькой :) , метод initialize аналогичен методу __construct в php, он исполняется в момент когда создают копию объекта.
Создать объект довольно просто:
aSong = Song.new("Stargazers", "Rainbow", 260)
Так же руби позволяет делать дамп объекта специальным методом inspect
aSong.inspect » "#Song:0x401b4924 @duration=260, @artist='Rainbow', @name='Stargazers'"
Если нам нужно наладить дамп объекта в другом формате для этого есть специальный метод to_s:
aSong.to_s » "#Song:0x401b499c"
Так как по дефолту это выводит лишь ID объекта мы можем переписать метод :)
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
def to_s
"Song: #{@name}--#{@artist} (#{@duration})"
end
end
aSong = Song.new("Stargazer", "Rainbow", 260)
aSong.to_s » "Song: Stargazer--Rainbow(260)"
Родительские классы в Ruby рассмотрим на следующем примере:
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
def to_s
"Song: #{@name}--#{@artist} (#{@duration})"
end
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration)
@lyrics = lyrics
end
end
Как вы заметили мы создали второй класс KaraokeSong и указали ему родительский класс Song. Для вызова initialize метода родительского мы используем super(). Все это видно из примера выше :)
super это очень интересная вещь ;) Он сообщает родительскому классу о том, что нужно вызвать метод с тем же именем из которого и был вызов super, в нашем примере мы вызываем super из метода initialize класса KaraokeSong в свою очередь super даёт задание вызвать метод initialize в классеSong, так как он родительский :)
Комментариев нет:
Отправить комментарий