Palavras-chave: Ruby, código fonte, ruby2ruby
Podemos obter o código de um método como uma String usando a gem ruby2ruby:
require "rubygems" require "ruby2ruby" class Teste def metodo puts "oi!" end end teste = Teste.new metodo = teste.method(:metodo) puts metodo.to_ruby
Rodando o código:
$ ruby r2r.rb def metodo puts("oi!") end
Vale mencionar que isso só funciona nos métodos de uma instância.
Existe algo parecido para Python?
Garaga!!
Ih rapaz, não sei se tem isso em Python não!
Oswaldo, cadê você? :-)
Não tem não. É um pouco mais complicado de implementar algo semelhante em Python porque os trechos de código são compilados para bytecode. Seria preciso uma espécie de “descompilador” Python para voltar a ter acesso ao código fonte original de uma função/método.
É possível acessar as instruções de bytecode, mas não é muito útil para o uso de alguém que não trabalhe com o desenvolvimento da própria linguagem.
TaQ, o Ruby não compila o código para bytecode, né? (não é uma questão retórica, é só uma dúvida mesmo).
Fala Osvaldo (agora acertei o V, desculpe pelo W)! Eu pedi um help pois havia procurado algo do tipo mas não havia encontrado …
Não, Ruby ainda não compila para bytecode não. Reza a lenda que vamos ter bytecodes redondinhos na versão 2.0, mas ainda tem um bom chão pela frente. :-)
Você levantou uma questão interessante: quando Ruby tiver bytecodes, será que a turma do ruby2ruby vai fazer um decompiler? Vamos ficar de olho.
Abraços procêis!
O python provê informacão de onde o código gerado veio, se você tiver os códigos, fica fácil de achar:
def f(): pass
print f.func_code.co_filename
print f.func_code.co_firstlineno
Claro que existe o facilitador “inspect”:
import inspect
inspect.getsource(f)
Este tipo de descompilador podia vir direto das linguagens de programação.
Por exemplo, cada método tivesse em seu código uma descrição dizendo como foi feito e tals.
A aqui não está dando certo :\
Está dando erro