Mam kilka pytań dotyczących metod, procedur i bloków Ruby, które wydają mi się dość dziwne. Nie tyle chodzi o składnię, czy funkcję, co logika podejmowanych decyzji.Metoda Rubiego, Proc i pomieszanie bloków
Pytanie 1:
Dlaczego jest to, że bloki mogą być przekazywane do metody (np każda), ale nie można ich przypisać do zmiennej?
Wiem, że można je przekazać w procedurach, tj. p = Proc.new {...}
(dostęp za pomocą &p
), ale nie ma większego sensu, aby programista przechodził przez te środki.
Pytanie 2:
Dlaczego istnieje rozróżnienie pomiędzy metodami i procedurami?
Na przykład, mogę wykonać zadanie definiowania funkcji i wywołanie tej funkcji w dwóch następujących sposobów:
def square(x)
x**2
end
square(3)
=> 9
lub
square = lambda {|x| x**2}
square.call(3)
=> 9
dlaczego różnicowanie? W Pythonie na przykład zarówno definiowanie funkcji w standardowy sposób jak i przez square = lambda x: x**2
wykonuje to samo zadanie tworzenia funkcji i przypisywania jej do square
.
Ruby twierdzi, wszystko jest obiektem. Bloki powinny być obiektami, aby się do nich dopasować, i mogą być przekazywane jako argumenty, więc z pewnością zachowują się jak obiekty w pewien sposób. – rpjohnst
Bloki mogą być wykonane tak, aby działały jak obiekty poprzez tworzenie obiektów do ich reprezentowania, proc lub lambda. Bez tego urządzenia są tylko strukturami składniowymi. – Pinochle
Są obiekty blokowe - taki jest cel lambda {cokolwiek}. – Chuck