if
ma unless
, tak i while
ma until
. Przykład z Railsów: def drain run(@queue.pop) until @queue.empty? end
for
jest prawie taka sama jak korzystanie z metody each
. Istotną różnicą jest to, że ta druga wprowadza nowy zakres zmiennych. > movies = %w[Ruby Java Python] > movies.each {|movie| i = movie} > i NameError: undefined local variable or method 'i' for main:Object from (irb):3 from /Users/sqbell/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in '<main>' > for movie in movies ?> z = movie ?> end > z => "Python"
case
w Rubym do porównania korzysta z operatora ===
.false
i nil
są traktowane jako false
. 0 to w Rubym true
.*
(splat). parameters = ["John", "Goodman", 1952] def add_actor(name, surname, born) # do something end add_actor(*parameters)
map
przechodzi przez kolekcję, wykonując na każdym elemencie blok kodu. Zwraca tablicę ze wszystkim, co blok zwrócił.inject
przekazuje do bloku dwa argumenty: element kolekcji i obecny wynik przeprowadzanej operacji (dodawania, etc.). [1, 2, 3].inject(0) {|result, number| result += number} # lub w skrócie [1, 2, 3].inject(:+) => 6
set
.array = []; array[24566] = sqbell
utworzy 24567 nowych elementów tablicy, większość których będzie równa nil
./\d\d:\d\d (AM|PM)/ =~ “10:24 PM”
- rezultat to 0
, co oznacza, że znaleziono wzorzec pod indeksem 0
. Gdy nic nie znaleziono, zwrócony zostanie nil
.=~
działa w obie strony. time = '10:24 AM' puts "Mooorning's heeereeee!!!" if /AM/ =~ time puts "Mooorning's heeereeee!!!" if time =~ /AM/
Hashach
nie możemy później odwoływać się do danych wartości za pomocą Stringów
. W Railsach dodano po to osobną klasę HashWithIndifferentAccess
. person = {} person[:name] = 'Marek' puts "Name: #{person['name']}" person = HashWithIndifferentAccess.new person[:name] = 'Marek' puts "Name: #{person['name']} and #{person[:name]}"
public
, private
, protected
,public
,private
nie mogą być wykonywane z referencją do obiektu. (n = doc.word_count
, jeśli word_count
byłoby metodą private
, zakończyłoby się rzuceniem wyjątku),private
mogą być wywoływane przez podklasy,protected
można wywoływać w każdej instancji danej klasy (??),send
- n = doc.send(:word_count)
attr_accessor
, która zrobi to za nas. class Girl attr_accessor :height end
Symbol | Przykład | Znaczenie |
---|---|---|
%q{} | str = %q{“What is up?”, she asked. “'sup you ask?”} | Arbitrary quote mechanism - ograniczona interpretacja, jak z pojedynczym cudzysłowem |
%Q{} | str = %Q<My favorite show is #{Shows.find_by_name('Frasier')}> | Interpretacja jak z podwójnym cudzysłowem |
%s{} | ||
%S{} | ||
%r{} | ||
%w{} | ||
%x{} |