Kapitola 58. Metaprogramování

Obsah

58.1. Anonymní třídy
58.2. Singleton

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
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .