Attributy: id="metaprogramming"
Odkazy:
Z "Ruby for Fun and Profit" by Dave Thomas
Přidání metody jen a pouze do jednoho objekut.
a = "cat" def a.encrypt tr 'a-z', 'b-za' end
Vytvoří anonymní třídu. Do této třídy vloží metodu encrypt
a tuto anonymní třídu udělá supertřídou třídy String
.
Všechny definice jsou aktivní.
class Logger if ENV['DEBUG'] def log(msg) STDERR.puts "LOG: " + msg end else def log(msg) end end end
Ruby při načítání programu ze zdrojového suboru vytvoří AST (Abstract Syntax Tree) který reprezentuje daný soubor. Tuto činnost provádí parser. Kompilátory či interprety jiných jazyků dělají totéž. Rozdíl je v tom, že Ruby vykonává tento AST. V kompilovaných jazycích a řadě interpretovaných jazyků interpret pokračuje tím, že z AST vytobí bajtkód. Teprve tento bajtkód je vykonáván. Kompilované jazyky mohou dále pokračovat a přeložit bajtkód do instrukcí pro konkrétní procesor a tyto zapsat do tzv. vykonatelného souboru zvaného často binárka.
class Demo puts self # => Demo puts self.class # => Class end