Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Metaprogramming Ruby
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Francisco Fernández Castaño
February 15, 2013
Programming
98
1
Share
Metaprogramming Ruby
A short introduction to dynamic aspects of Ruby and Ruby Object model.
Francisco Fernández Castaño
February 15, 2013
More Decks by Francisco Fernández Castaño
See All by Francisco Fernández Castaño
Graph Databases, a little connected tour (Codemotion Rome)
fcofdez
0
140
Bases de datos de grafos, un recorrido conectado
fcofdez
0
92
Graph Databases
fcofdez
1
240
Graph Databases
fcofdez
3
310
Other Decks in Programming
See All in Programming
Oxlintとeslint-plugin-react-hooks 明日から始められそう?
t6adev
0
310
Making the RBS Parser Faster
soutaro
0
640
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
440
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
180
CDK Deployのための ”反響定位”
watany
5
920
AIを導入する前にやるべきこと
negima
2
320
From Formal Specification to Property Based Test
ohbarye
0
660
空間オーディオの活用
objectiveaudio
0
110
GitHubCopilotCLIをはじめよう.pdf
htkym
0
310
[RubyKaigi 2026] Require Hooks
palkan
1
280
Claude Code × Gemini × Ebitengine ゲーム制作素人WebエンジニアがGoでゲームを作った話
webzawa
0
210
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
130
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.7k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
New Earth Scene 8
popppiees
3
2.2k
How to Talk to Developers About Accessibility
jct
2
190
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
180
AI: The stuff that nobody shows you
jnunemaker
PRO
6
620
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
110
Automating Front-end Workflow
addyosmani
1370
200k
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
130
Measuring & Analyzing Core Web Vitals
bluesmoon
9
820
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
790
Transcript
None
Ruby • Orientado a objetos • Lenguaje dinámico • Partes
funcionales (Bloques)
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'
¿Pero qué es eso del “metaprogramming”?
¿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
None
¿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
None
Debemos conocer el modelo de objetos de Ruby
Debemos conocer el modelo de objetos de Ruby
en ruby todo es un objeto 2.0.0-rc2 :001 > 1.class
=> Fixnum
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
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"
Modelo de objetos de Ruby • La keyword class solo
cambia de contexto • Las clases también son objetos de la clase Class
Modelo de objetos de Ruby class MyClass def my_method() @var
= 1 end end Obj1 = MyClass.new Obj1.my_method
Modelo de objetos de Ruby
Jerarquía de Clases class Book include Printable include Document Ancestors
# => [Book, Document, Printable, Object, Kernel, BasicObject] end
Method Lookup
None
None
Conclusiones
Cosas que me he dejado fuera
Preguntas
None