Meta-programmeren met Ruby en Erik

Geplaatst door Danny Lagrouw za, 18 maa 2006 01:24:00 GMT

In de wervelende wereld van het webloggen zou je haast vergeten dat er ook nog dingen bestaan als mailinglists en nieuwsgroepen. En juist op het gebied van Ruby is daar vaak interessante informatie te vinden. Door Erik Veenstra (auteur van o.a. RubyScript2Exe) werd ik gewezen op zijn artikel over meta-meta-programmeren in Ruby, op comp.lang.ruby.

Meta-programmeren zou je kunnen omschrijven als ‘het schrijven van programmatuur die nieuwe programmatuur genereert’. Wie heeft nog nooit een programma geschreven dat een bestand wegschreef dat zelf ook weer programmacode bevat? In Ruby kan het bijvoorbeeld zo:

class Meta
  def test
    # laat random_cmd één van de drie expressies bevatten:
    random_cmd = %w(Time.now `dir` 12345)[rand(3)]

    # maak een nieuw bestand aan, testmeta2.rb:
    open('testmeta2.rb', 'w') do |f|

      # schrijf nieuwe programmacode die de expressie
      # print, weg in het bestand:
      f.print "puts #{random_cmd}" 
    end

    # bonus: voer het nieuw verkregen programma uit:
    system('ruby testmeta2.rb')
  end
end

Meta.new.test

Niet echt elegant, maar het toont het principe, het werkt, en het kan zijn nut hebben. Waarom krijgt dit binnen de Ruby-wereld zoveel aandacht?

Lees verder...

Geplaatst in  | Tags ,  | geen reacties