Я взломал to_hash
для объекта (я не говорю, что это хорошая идея, просто эксперимент). Когда я наткнулся на странную проблему, где IO
перестал работать.
#lib/object.rb
class Object
def to_hash
self.instance_variables.inject({}) { |hash,var| hash[var.to_s.delete("@")] = self.instance_variable_get(var); hash }
end
end
#run_test1.rb
require_relative 'lib/Object'
require 'FileUtils'
puts 'run test'
#run_test2.rb
require_relative 'lib/Object'
File.open('test.txt', 'w') {|f| f.write('this is a test')}
в run_test1 я получаю
<internal:lib/rubygems/custom_require>:29:in `set_encoding': wrong number of arguments (0 for 1..2) (ArgumentError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from <internal:lib/rubygems/custom_require>:29:in `require'
from .../run_test1.rb:2:in `<main>'
в run_test2 я получаю
run_test2.rb:3:in `initialize': No such file or directory - test.txt (Errno::ENOENT
from run_test2.rb:3:in `open'
from run_test2.rb:3:in `<main>'
(если файл существует, он говорит, что файл не открыт для записи)
Хотя я не удивлен, что это произошло - просто любопытно, что здесь происходит? Теоретически это должно быть хорошо, однако, что является основной причиной.
Соответствующая информация:
- ruby 1.9.2p290 (2011-07-09) [i386-mingw32]
- XP SP3 32-разрядная
- ВЕРСИЯ RUBYGEMS: 1.8.12