
不可能的程式
|
281
puts program
}
program = "data = %q{#{data}}" + data
puts program
相較之下這更有趣了。讓我們來看看這個程式碼在主控台做了什麼:
>> data = %q{
program = "data = %q{#{data}}" + data
puts program
}
=> "\nprogram = \"data = %q{\#{data}}\" + data\nputs program\n"
>> program = "data = %q{#{data}}" + data
=> "data = %q{\nprogram = \"data = %q{\#{data}}\" + data\nputs program\n}\n
program = \"data = %q{\#{data}}\" + data\nputs program\n"
>> puts program
data = %q{
program = "data = %q{#{data}}" + data
puts program
}
program = "data = %q{#{data}}" + data
puts program
=> nil
果然,
puts program
這行真的會印出整個程式的原始碼。
很明顯的就是希望這種轉換不會依賴程式本身的任何特殊屬性,因此它能在任何 Ruby
程式運作,而且使用
$stdin.read
或
File.read(__FILE__) ...