我们知道ruby中如果源代码中一行开头(必须在行的开头)有__END__标示,则表示下面的都是数据行,可以用IO对象DATA来访问这些行.但是如果我们用DATA.rewind一下的话,就可以将文件流指向文件开头鸟,然后就可以访问源代码本身啦:
#!/usr/bin/ruby
DATA.rewind
i=1
DATA.each_line do |line|
puts "#{'%03d' % i} #{line}"
i+=1
end
__END__
运行结果:
wisy@wisy-ThinkPad-X61:~/src/ruby_src$ ./a.rb
001 #!/usr/bin/ruby
002
003 DATA.rewind
004 i=1
005 DATA.each_line do |line|
006 puts "#{'%03d' % i} #{line}"
007 i+=1
008 end
009 __END__
喜欢C语言的童鞋可以用C重写下