Ruby on Rails

Metaprogramowanie w Ruby

define_method, method_missing, class_eval, instance_eval, hooks, DSLs

20 pytań z rozmów·
Senior
1

Czym jest metaprogramowanie w Ruby?

Odpowiedź

Metaprogramowanie to zdolność programu do pisania lub modyfikowania kodu w czasie wykonywania. W Ruby umożliwia to dynamiczne definiowanie metod, klas i modułów, czyniąc kod bardziej elastycznym i zwięzłym. Technika ta jest szeroko stosowana we frameworkach takich jak Rails do tworzenia eleganckich DSL i ograniczania duplikacji kodu.

2

Jaki jest cel metody define_method w Ruby?

Odpowiedź

define_method pozwala tworzyć metody dynamicznie w czasie wykonania. Przyjmuje nazwę metody (symbol lub łańcuch znaków) oraz blok definiujący ciało metody. W przeciwieństwie do def, define_method przechwytuje zmienne lokalne z otaczającego zakresu poprzez closure, co jest przydatne do generowania metod o sparametryzowanym zachowaniu.

3

Kiedy metoda method_missing jest wywoływana przez Ruby?

Odpowiedź

method_missing jest wywoływana automatycznie, gdy obiekt otrzymuje wywołanie metody, która nie istnieje w jego łańcuchu dziedziczenia. Otrzymuje nazwę wywołanej metody oraz jej argumenty, co umożliwia dynamiczną obsługę tych wywołań. Stanowi to podstawę wielu wzorców metaprogramming, takich jak ghost methods używane w ActiveRecord.

4

Jaka jest główna różnica między class_eval a instance_eval?

5

Który hook jest wywoływany, gdy module jest dołączany do klasy?

+17 pytań z rozmów

Opanuj Ruby on Rails na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo