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

Might be a bug.

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 © 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 methodglobal_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>