class Example
def instMeth # инстанция объекта
end
def Example.classMeth # метод класса
end
end
В качестве примера работы методов:
class Calc
def Calc.showSumm(i,k)
return i + k;
end
end
Calc.showSumm(5,4) // 9
Эволюция чайника в кофеварку
class Example
def instMeth # инстанция объекта
end
def Example.classMeth # метод класса
end
end
class Calc
def Calc.showSumm(i,k)
return i + k;
end
end
Calc.showSumm(5,4) // 9
Продолжаем тему ООП в Руби :).
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
class Song
attr_reader :name :artist :duration; # Разрешает чтение атрибута
attr_write :name :artist :duration; # Разрешает запись атрибута
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
class Song
@@plays = 0
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
@plays = 0
end
def play
@plays += 1
@@plays += 1
"This song: #@plays plays. Total #@@plays plays."
end
end
####### дебаг)
s1 = Song.new("Song1", "Artist1", 234) # test songs..
s2 = Song.new("Song2", "Artist2", 345)
s1.play » "This song: 1 plays. Total 1 plays."
s2.play » "This song: 1 plays. Total 2 plays."
s1.play » "This song: 2 plays. Total 3 plays."
s1.play » "This song: 3 plays. Total 4 plays."
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
aSong = Song.new("Stargazers", "Rainbow", 260)
aSong.inspect » "#Song:0x401b4924 @duration=260, @artist='Rainbow', @name='Stargazers'"
aSong.to_s » "#Song:0x401b499c"
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)"
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
super это очень интересная вещь ;) Он сообщает родительскому классу о том, что нужно вызвать метод с тем же именем из которого и был вызов super, в нашем примере мы вызываем super из метода initialize класса KaraokeSong в свою очередь super даёт задание вызвать метод initialize в классеSong, так как он родительский :)
my_array = ['php', 'ruby', 'perl' , 'python']
my_array = %w( php ruby perl python)
my_array = Array.new
my_array << 'php'
my_array << 'ruby'
my_array << 'perl'
my_array << 'python'
first = my_array.first # first = php
last = my_array.last # last = python
total = my_array.length # total = 4
games = ['startcraft', 'quake', 'warcraft']
games.each do |Game|
puts "#{Game} классная игра!"
end
=> startcraft классная игра!
=> quake классная игра!
=> warcraft классная игра!
games = ['startcraft', 'quake', 'warcraft']
games.each_with_index do |game , index|
puts "#{index} : {game} классная игра!"
end
=> 1 : startcraft классная игра!
=> 2 : quake классная игра!
=> 3 : warcraft классная игра!
items = ['Ruby On Rails', 'Ruby', 'My Self']
array_of_stuff = items.map do |item|
"i love #{item}"
end
# Массив array_of_stuff состоит сейчас из :
=> ['i love Ruby On Rails', 'i love Ruby', 'i love My Self']
c:\rails_www\test\>ruby script/server
c:\rails_www\>gem install fastthread --source=http://mongrel.rubyforge.org/releases
Need to update 8 gems from http://mongrel.rubyforge.org/releases
........
complete
Select which gem to install for your platform (i386-mswin32)
1. fastthread 1.0 (ruby)
2. fastthread 1.0 (ruby)
3. fastthread 1.0 (mswin32) <-- нам нужен этот вариант.
4. fastthread 0.6.4.1 (ruby)
5. fastthread 0.6.4.1 (mswin32)
6. Skip this gem
7. Cancel installation
> 3
Successfully installed fastthread-1.0-mswin32
c:\rails_www\>gem install mongrel --source=http://mongrel.rubyforge.org/releases
Select which gem to install for your platform (i386-mswin32)
1. mongrel 1.0.1 (ruby)
2. mongrel 1.0.1 (mswin32)
3. mongrel 1.0.1 (ruby)
4. mongrel 1.0 (ruby)
5. mongrel 1.0 (mswin32)
6. Skip this gem
7. Cancel installation
> 2
Install required dependency gem_plugin? [Yn] Y
Successfully installed mongrel-1.0.1-mswin32
Successfully installed gem_plugin-0.2.2
Installing ri documentation for mongrel-1.0.1-mswin32...
Installing ri documentation for gem_plugin-0.2.2...
Installing RDoc documentation for mongrel-1.0.1-mswin32...
Installing RDoc documentation for gem_plugin-0.2.2...
ruby script/server
Ruby Gems это такая классная штуковина которая помогает нам скачивать всякие офигенные прибамбасины для нашего замечательного фреймворка :). Ну всякие там дополнения это как в Debian диструбутивах софтинка Apt-get благодоря которой вы можете скачивать пакеты для вашего линукса. Кстати говоря сравнивая это с apt-get так же стоит сказать, что apt-get качает пакеты, а ruby gems качает гемы ^_^ логично да?
c:\rubygems\
ruby setup.rb
gem install rails --include-dependencies
gem install activesupport
gem install actionpack
gem install actionmailer
gem install activerecord
gem install actionwebservice
gem install rake
c:\rails_apps\
c:\rails_apps\> rails Test
CakePHP довольно таки медленная система, но крайне удобная с точки зрения реализации MVC и настройки. Элементарным примером низкой производительности этой системы будет служить то, что Welcome Screen после запуска Cake приложения ( когда вы только установили Cake ) генерируется крайне медленно, сравнивать сейчас не возьмусь, но поверьте для такого простого задания это долго. Этот фактор низкой производительности мучал меня довольно долго.. и я даже как-то решил перейти на CodeIgniter, и был крайне удивлён тому насколько он быстро работает на фоне CakePHP, но не все так красиво и прекрасно с моей тогдашней находкой, ужасная реализация layout системы просто заставила меня забыть этот фреймворк. И вот Я решился на этот шаг и положить php в далекий ящик. За три года работы с этим языком мне в нём очень многое стало раздражать, по-этому я уже был морально готов ко всем вкусностям которые так громко и навязчиво перечислял мой знакомый ...Что я полюбил в Руби еще не начав его использовать ...