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)