Hi, Is there a way to override the method_missing method and keep the SetVariable lookup behavior from ScriptScope? For example, in C# aScriptScope.SetVariable("a", "some_value") in Ruby p a => "some_value" But if I do, class << self def method_missing(sym, *args, &block) case (sym) when :some_case do_something else super #try to fallback to the original end end end or class << self alias :old_method_missing :method_missing def method_missing(sym, *args, &block) case (sym) when :some_case do_something else old_method_missing(sym, *args, &block) #try to fallback to the original end end end p a => NameError: undefined local variable or method ''a'' for main:Object -- Posted via http://www.ruby-forum.com/.
Might be a bug. -----Original Message----- From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Lewis L. Sent: Wednesday, October 19, 2011 8:24 AM To: ironruby-core at rubyforge.org Subject: [Ironruby-core] override method_missing() Hi, Is there a way to override the method_missing method and keep the SetVariable lookup behavior from ScriptScope? For example, in C# aScriptScope.SetVariable("a", "some_value") in Ruby p a => "some_value" But if I do, class << self def method_missing(sym, *args, &block) case (sym) when :some_case do_something else super #try to fallback to the original end end end or class << self alias :old_method_missing :method_missing def method_missing(sym, *args, &block) case (sym) when :some_case do_something else old_method_missing(sym, *args, &block) #try to fallback to the original end end end p a => NameError: undefined local variable or method ''a'' for main:Object -- Posted via http://www.ruby-forum.com/. _______________________________________________ Ironruby-core mailing list Ironruby-core at rubyforge.org http://rubyforge.org/mailman/listinfo/ironruby-core
Thanks a lot. At least I won''t be killing myself trying to figure out what I missed. FYI, I tested on version 1.1 and 1.1.3 and they seem to have the same issue. Since we are on the subject, I wonder if you can spare some of your time help me understand this: As far as I understand, the global environment is actually a singleton ''main'' Object. The function defined in the global scope should be translated to private method of Object class which is what it shows in iirb.bat. Not sure why ir.exe as well as the code in the ScriptEngine does not behave that way. c:\Program Files\IronRuby 1.1\bin>ir IronRuby 1.1.3.0 on .NET 4.0.30319.225 Copyright (c) Microsoft Corporation. All rights reserved.>>> def global_hi... puts ''hi'' ... end => nil>>> class A... def hi ... global_hi ... end ... end => nil>>> A.new.hi(ir):3:in `hi'': undefined method `global_hi'' for #<A:0x0000056> (NoMethodError) from (ir):1>>> self.method(:global_hi)=> #<Method: Object(#<Class:#<Object:0x0000058>>)#global_hi>>>> exit--------------------------------------------------------------------- c:\Program Files\IronRuby 1.1\bin>iirb irb(main):001:0> def global_hi irb(main):002:1> puts ''hi'' irb(main):003:1> end => nil irb(main):004:0> class A irb(main):005:1> def hi irb(main):006:2> global_hi irb(main):007:2> end irb(main):008:1> end => nil irb(main):009:0> A.new.hi hi => nil irb(main):010:0> self.method(:global_hi) => #<Method: Object#global_hi> irb(main):011:0> -- Posted via http://www.ruby-forum.com/.