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/.