Last active
May 16, 2018 13:41
-
-
Save douglasmartins7/d30c2722153bb7bb67202c8c6c4ea73f to your computer and use it in GitHub Desktop.
Ruby
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
############################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