inf:ruby:eloquent
Rozdział 2
Tak jak
if ma
unless, tak i
while ma
until. Przykład z Railsów:
def drain
run(@queue.pop) until @queue.empty?
end
Pętla
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"
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)
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] = sqbell utworzy 24567 nowych elementów tablicy, większość których będzie równa nil.
Rozdział 5
/\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.
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
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]}"
Rozdział 7 - Obiekty
metody mogą być public, private, protected,
metody w Rubym są standardowo public,
metody 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),
metody private mogą być wywoływane przez podklasy,
metodę protected moż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 (external edit)