Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save douglasmartins7/d30c2722153bb7bb67202c8c6c4ea73f to your computer and use it in GitHub Desktop.
Save douglasmartins7/d30c2722153bb7bb67202c8c6c4ea73f to your computer and use it in GitHub Desktop.
Ruby
############################Eval###################################
a = "puts 1 + 2"
eval a
#ele executa a imprimindo 3 == metaprogamacao
############################Instance_eval para a instancia###################################
#ele consegue pegar metodos privados tambem
class Teste
def initialize
@variavel = "Danilo"
end
end
teste = Teste.new
#acesso pelo instance_eval
puts teste.instance_eval{ @variavel}
or
teste.instance_eval do
puts @variavel
end
#adicionar metodos na estancia
teste.instance_eval do
puts self
end
#ou se tiver varios metodos para inserir na estancia na classe ele nao aparecera
teste.instance_eval do
def metodo
puts "metodo"
end
def metodo2
puts "metodo"
end
def metodo3
puts "metodo"
end
end
#chamo ela
puts teste.metodo
############################Instance_eval para a classe###################################
class Teste
end
Teste.instance_eval do
def metodo_de_classe
puts "metodo de class instance_eval"
end
def metodo_de_classe2
puts "metodo de classe instance_eval 2"
end
end
#estou inserindo esses metodos na classe Teste
Teste.metodo_de_classe
Teste.metodo_de_classe2
############################class_eval###################################
#para criar metodos para a estancia
class Teste;end
Teste.class_eval do
def metodo_de_estancia
puts "metodo de class_eval"
end
def metodo_de_estancia_eval2s
puts "metodo de class_eval 2"
end
end
Teste.new.metodo_de_instancia
Teste.new.metodo_de_estancia2
# Nela voce consegue inserir metodos nos objetos do sistema como a String ou fixnum
# monkey path - voce insere um metodo no objeto string na sua aplicacao
String.class_eval do
def teste
"douglas"
end
end
"danilo".teste
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment