[Ironruby-core] ExecutionContext without references IronRuby

Ben Hall ben2004uk at googlemail.com
Mon Jun 23 21:20:47 EDT 2008


Thanks for your reply.  The fact "customers" calls method_missing is a
bit of a problem, as what happens if you call customers within the
method_missing block?

           scope = engine.CreateScope();
            scope.SetVariable("customers", list);

            string startingBlock = @"require 'mscorlib'
                                    def
customers.method_missing(methodname, *args)
                                        puts methodname
                                        if(methodname.to_s =~ /Bob/)
                                            customers.add(methodname.to_s)
                                        else
                                            super
                                        end
                                    end
                                    customers.Bob
                                    ";
            scope.Execute(startingBlock);

I was working based on Phil Haack's Monkey Patching example and seeing
what happened.
I put some code which checks to see if the methodname is itself, but
then I check exceptions saying add isn't on NilClass, must be doing
something wrong in that scenario

Code I added to the method was:
if( methodname.to_s == 'customers')
   self

Like I said, only playing around to see what happens but I can see
people possible wanting to do this.


On Tue, Jun 24, 2008 at 1:50 AM, Tomas Matousek
<Tomas.Matousek at microsoft.com> wrote:
> This is by design. Ruby global variables are Ruby special feature, not all languages have such thing.
> You can however use the scope and completely avoid statically referencing IronRuby assemblies:
>
> var runtime = ScriptRuntime.Create();
> var scope = runtime.CreateScope("Ruby");
> scope.SetVariable("customers", list);
> scope.Execute("p customers");
>
> In this example, "customers" is a method call that hits method_missing. The IronRuby's implementation of method_missing looks into the scope if run in a hosted environment.
>
> Tomas
>
> -----Original Message-----
> From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Ben Hall
> Sent: Monday, June 23, 2008 5:23 PM
> To: ironruby-core at rubyforge.org
> Subject: [Ironruby-core] ExecutionContext without references IronRuby
>
> Hi,
>
> This might be a bit of a strange request,  but is it possible to get
> access to the ExecutionContext without actually referencing the
> IronRuby assembly?
>
> As a quick demo, I wrote the following code:
>
>            ScriptRuntime runtime = IronRuby.CreateRuntime();
>            engine = IronRuby.GetEngine(runtime);
>            RubyExecutionContext ctx = IronRuby.GetExecutionContext(engine);
>
>            list = new List<string>();
>            ctx.DefineGlobalVariable("customers", list);
>
> Ideally, what I wanted to write was something more like but $customers
> is always nil.
>
>            scope = engine.CreateScope();
>            scope.SetVariable("$customers", list);
>
> I was hoping this would have had the same affect as the code above.
>
> Is this by design, a limitation or a bug?
>
> Thanks
>
> Ben
> Blog.BenHall.me.uk
> _______________________________________________
> 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
>


More information about the Ironruby-core mailing list