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{} |