[Ironruby-core] Access Top Level methods

Lewis Lin llin at polypaths.com
Tue Aug 2 15:15:42 EDT 2011


  Hi,

I am doing this to implement a DSL. I want to allow user to define some 
function and be used by the DSL. Without this, I don't know how to get 
it working. I am sure there is a rational explanation for what I see. 
Could someone help me please?

Thanks,
Lewis

On 7/20/2011 10:49 AM, Lewis Lin wrote:
> Hi,
>
> Thanks for the reply. My main development version is on 1.1 for .NET 
> 3.5. However, I did try it on 1.1.3 on .NET 4.0.30319.225 and still 
> are able to reproduce the issue. I am running Windows XP 32bit 
> environment. Is there any environment variables I should look into? 
> Here is the screen copy I just did.
>
> As far as I understand, the global environment is actually a '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 ScriptEngine behaves differently.
>
> Thanks for your time!
> Lewis
>
> 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>
>
>
>
>
> On 7/20/2011 8:37 AM, Sickboy wrote:
>> I cannot reproduce this issue with IronRuby 1.1.3.0 on .NET 4.0.30319.235
>> It works as expected: ir.exe result is same as irb result.
>> Regards
>> *From:* Lewis Lin <mailto:llin at polypaths.com>
>> *Sent:* Thursday, June 30, 2011 9:58 PM
>> *To:* ironruby-core at rubyforge.org <mailto:ironruby-core at rubyforge.org>
>> *Subject:* [Ironruby-core] Access Top Level methods
>> Hi,
>>
>> I am trying to access top level method from the class definition in 
>> IronRuby scripts. Example:
>>
>> def global_hi
>> end
>>
>> class A
>>    def hi
>>       global_hi
>>    end
>> end
>>
>> A.new.hi
>>
>> The script executed in ScriptEngine throws a NoSuchMethodError.
>> I tried to ran the same code in iirb.exe It seems to behave the way I 
>> expected. But when I tried it in ir.exe, it throws the exception as well.
>> I investigate a little more and found out
>>
>> irb(main):021:0> self.method(:global_hi)
>> => #<Method: Object#global_hi>
>> and
>> in ir.exe as well as script engine
>> >>> self.method(:xx)
>> => #<Method: Object(#<Class:#<Object:0x0000058>>)#xx>
>>
>> Is there anyway to make the script behave like the one in iirb.exe?
>>
>> Thanks,
>> Lewis
>>
>> ------------------------------------------------------------------------
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>>
>>
>> _______________________________________________
>> Ironruby-core mailing list
>> Ironruby-core at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20110802/72e643fa/attachment-0001.html>


More information about the Ironruby-core mailing list