Mam metodę, która przyjmuje blok.Drukowanie kodu źródłowego bloku Ruby
Oczywiście nie wiem, co zostanie przekazane i z dziwnych powodów, dla których nie będę tutaj wchodził Chcę wydrukować zawartość bloku.
Czy istnieje sposób, aby to zrobić?
Mam metodę, która przyjmuje blok.Drukowanie kodu źródłowego bloku Ruby
Oczywiście nie wiem, co zostanie przekazane i z dziwnych powodów, dla których nie będę tutaj wchodził Chcę wydrukować zawartość bloku.
Czy istnieje sposób, aby to zrobić?
Możesz to zrobić za pomocą Ruby2Ruby, która implementuje metodę to_ruby.
require 'rubygems'
require 'parse_tree'
require 'parse_tree_extensions'
require 'ruby2ruby'
def meth &block
puts block.to_ruby
end
meth { some code }
wyjście wola:
"proc { some(code) }"
Chciałbym również sprawdzić to niesamowite rozmowy przez Chris Wanstrath z Github http://goruco2008.confreaks.com/03_wanstrath.html On pokazuje kilka ciekawych przykładów ruby2ruby i użytkowania drzewo wyprowadzenia.
W Rubim 1.9 możesz wypróbować ten klejnot, który wyodrębnia kod z pliku źródłowego.
Opierając się na odpowiedź Evangenieur, oto jest odpowiedź Corban jeżeli miałeś Ruby 1.9:
# Works with Ruby 1.9
require 'sourcify'
def meth &block
# Note it's to_source, not to_ruby
puts block.to_source
end
meth { some code }
Moja firma używa do wyświetlania kodu Ruby wykorzystywane do wykonywania obliczeń węgla ... użyliśmy drzewo wyprowadzenia z Ruby 1.8 i teraz sourcify with Ruby 1.9.
W Ruby 1.9+ (testowane z 2.1.2), można użyć https://github.com/banister/method_source
wydrukować źródłowego poprzez block#source
:
#! /usr/bin/ruby
require 'rubygems'
require 'method_source'
def wait &block
puts "Running the following code: #{block.source}"
puts "Result: #{yield}"
puts "Done"
end
def run!
x = 6
wait { x == 5 }
wait { x == 6 }
end
run!
pamiętać, że w porządku dla źródła należy czytać trzeba aby użyć pliku i wykonać plik (testowanie go z irb spowoduje następujący błąd: MethodSource::SourceNotFoundError: Could not load source for : No such file or directory @ rb_sysopen - (irb)
Czy działa to tylko z Ruby 1.8? http://blog.zenspider.com/2009/04/parsetree-eol .html mówi o "zrzucaniu bloku/proc supportu", aby poradzić sobie z Parse Drzewo nie jest dostępne w rubinach 1.9. –
Nie, to nie zadziała w Rubim 1.9, ponieważ nie zapewnia wymaganych haczyków do działania ParseTree. Najwyraźniej jest noway, aby uzyskać seksu w 1.9. Nie jest to duży problem, ponieważ do czasu, kiedy wszyscy przejdą na 1.9 inne vms, tak jak Rubinius powinien być dostępny w prime time. Rubinius natywnie zawiera plik to_sexp dla wszystkich obiektów, więc wykonywanie tych operacji będzie banalne. –