Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Metaprogramming Ruby

Metaprogramming Ruby

A short introduction to dynamic aspects of Ruby and Ruby Object model.

Francisco Fernández Castaño

February 15, 2013
Tweet

More Decks by Francisco Fernández Castaño

Other Decks in Programming

Transcript

  1. Ruby es simple en apariencia, pero complejo por dentro, como

    el cuerpo humano. tratando de hacer que Ruby sea natural, no simple. Yukihiro Matsumoto 'matz'
  2. ¿Pero qué es eso del metaprogramming? Metaprogramming is the writing

    of computer programs that write or manipulate other programs (or themselves) as their data. Wikipedia
  3. ¿Pero qué es eso del metaprogramming? • Manejo de mensajes

    cuyo destino no es conocido • Capacidad de creación y modificación de clases en runtime
  4. en ruby todo se ejecuta dentro de un objeto 2.0.0-rc2

    :002 > self => main 2.0.0-rc2 :003 > class MyClass 2.0.0-rc2 :004?> self 2.0.0-rc2 :005?> end => MyClass 2.0.0-rc2 :006 > self => main 2.0.0-rc2 :007 > class MyClass 2.0.0-rc2 :008?> def test 2.0.0-rc2 :009?> self 2.0.0-rc2 :010?> end 2.0.0-rc2 :011?> def self.class_method 2.0.0-rc2 :012?> self 2.0.0-rc2 :013?> end 2.0.0-rc2 :014?> end => nil 2.0.0-rc2 :015 > MyClass.new.test => #<MyClass:0x00000002397860> 2.0.0-rc2 :016 > MyClass.class_method => MyClass
  5. MonkeyPatches 2.0.0-rc2 :017 > class String 2.0.0-rc2 :018?> def replace

    2.0.0-rc2 :019?> "dont replace" 2.0.0-rc2 :020?> end 2.0.0-rc2 :021?> end => nil 2.0.0-rc2 :022 > "stast".replace => "dont replace"
  6. Modelo de objetos de Ruby • La keyword class solo

    cambia de contexto • Las clases también son objetos de la clase Class
  7. Modelo de objetos de Ruby class MyClass def my_method() @var

    = 1 end end Obj1 = MyClass.new Obj1.my_method
  8. Jerarquía de Clases class Book include Printable include Document Ancestors

    # => [Book, Document, Printable, Object, Kernel, BasicObject] end