Upload
david-paniz
View
2.033
Download
3
Embed Size (px)
DESCRIPTION
Palestra apresentada durante o evento Ruby + Rails no Mundo Real 2010. Entendendo, de verdade, como funciona metaprogramação em ruby e desmistificando o que normalmente chamam de magia negra.
Citation preview
Voodoo é pra jacu!metaprogramação em ruby
Leonardo [email protected]
@leobessa
David [email protected]
@davidpanizwww.davidpaniz.com
Metaprogramação é a programação de programas que escrevem ou manipulam outros programas (ou a
si próprios) assim como seus dados
O que é metaprogramação?
Metaprogramming is writing code that writes code
O que é metaprogramação?
Metaprogramming is writing code that manipulates language
constructs at runtime
Qual a tarifa agora?
5
class Calculator def calculate(time) if (7...21).include?(time.hour) 1 else 0.5 end endend
p Time.now.tarifa
6
class Time def tarifa if (7...21).include?(hour) 1 else 0.5 end endend
p Time.now.tarifa
"I invented the term Object-Oriented, and I can tell you I did not have C++ in mind." -
Alan Kay
class
class
Codando...
woody.class == amigo.class
• Eu realmente posso adicionar um método a um único objeto?
• Onde o método está?
• Que tipo de objeto pode definir um método?
Criação de métodos
• Também conhecidas como Metaclass, Eigenclass, etc
• É uma classe como outra qualquer, mas escondida
• Existe uma para cada objeto (lazy)
Singleton Class
Qual é a Singleton Class
class << self self end
Qual é a Singleton Class
class Object def singleton_class class << self self end endend
Codando...
Como logar a chamada de um método?
alias :new_name :old_name
Que tal só ‘log :voar’?
Abrindo a classe...
E se eu quiser logar mais de método?
Generalização