Hi, I'm Carlo, I'm new to MacRuby and I'd like to contribute if possible. I found this weird bug when requiring modules that define classes that extend Forwardable and define delgates:
$ echo "require 'csv'; puts 'good'" | macirb require 'csv'; puts 'good' NameError: undefined local variable or method `str' for CSV::Row:Class from 0:in `def_delegator:' But requiring it from a script works fine: $ macruby -e "require 'csv'; puts 'good'" good Same behavior for rss/parser: $ echo "require 'rss/parser'; puts 'good'" | macirb require 'rss/parser'; puts 'good' NameError: undefined local variable or method `str' for RSS::Parser:Class from 0:in `def_delegator:' $ macruby -e "require 'rss/parser'; puts 'good'" good I traced it to the def_instance_delegator method in Forwardable: def def_instance_delegator(accessor, method, ali = method) str = %Q{ def #{ali}(*args, &block) #{accessor}.send(:#{method}, *args, &block) end } # If it's not a class or module, it's an instance begin module_eval(str) rescue instance_eval(str) end end I found that if I just hard code the str value as the parameters to module_eval and instance_eval, it works: def def_instance_delegator(accessor, method, ali = method) # If it's not a class or module, it's an instance begin module_eval(%Q{ def #{ali}(*args, &block) #{accessor}.send(:#{method}, *args, &block) end }) rescue instance_eval(%Q{ def #{ali}(*args, &block) #{accessor}.send(:#{method}, *args, &block) end }) end end This is kind of hack, so I'm assuming the root cause has to do with how macirb treats variable scope? Is this a known bug? Can I help somehow? -- .Carlo
_______________________________________________ MacRuby-devel mailing list MacRuby-devel@lists.macosforge.org http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel