inf:ruby:eloquent
Table of Contents
Rozdział 2
- Tak jak
ifmaunless, tak iwhilemauntil. Przykład z Railsów:def drain run(@queue.pop) until @queue.empty? end
- Pętla
forjest prawie taka sama jak korzystanie z metodyeach. 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"
casew Rubym do porównania korzysta z operatora===.- Tylko
falseinilsą traktowane jakofalse. 0 to w Rubymtrue.
Rozdział 3
- Chcąc podać tablicę jako parametry do metody, możemy skorzystać z symbolu
*(splat).parameters = ["John", "Goodman", 1952] def add_actor(name, surname, born) # do something end add_actor(*parameters)
mapprzechodzi przez kolekcję, wykonując na każdym elemencie blok kodu. Zwraca tablicę ze wszystkim, co blok zwrócił.injectprzekazuje 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
- Hashe w Rubym 1.9 są uporządkowane - to jest ostatnio dodany element jest na końcu hasha.
- Jeśli potrzebujemy kolekcji, która zapewnia unikalność, powinniśmy skorzystać z kolekcji
set. array = []; array[24566] = sqbellutworzy 24567 nowych elementów tablicy, większość których będzie równanil.
Rozdział 5
/\d\d:\d\d (AM|PM)/ =~ “10:24 PM”- rezultat to0, co oznacza, że znaleziono wzorzec pod indeksem0. Gdy nic nie znaleziono, zwrócony zostanienil.- Operator
=~działa w obie strony.time = '10:24 AM' puts "Mooorning's heeereeee!!!" if /AM/ =~ time puts "Mooorning's heeereeee!!!" if time =~ /AM/
Rozdział 6 - Symbole
- Używając symboli w
Hashachnie 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]}"
Rozdział 7 - Obiekty
- metody mogą być
public,private,protected, - metody w Rubym są standardowo
public, - metody
privatenie mogą być wykonywane z referencją do obiektu. (n = doc.word_count, jeśliword_countbyłoby metodąprivate, zakończyłoby się rzuceniem wyjątku), - metody
privatemogą być wywoływane przez podklasy, - metodę
protectedmożna wywoływać w każdej instancji danej klasy (??), - metody z ograniczonym dostępem i tak mogą być uruchamiane za pomocą metody
send-n = doc.send(:word_count)
Rozdział 14
- Zamiast ustawiania getterów i setterów za każdym razem, mamy wygodną metodę
attr_accessor, która zrobi to za nas.class Girl attr_accessor :height end
Inne
| 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{} |
inf/ruby/eloquent.txt · Last modified: 2021/02/16 09:56 by 127.0.0.1
