# ExecutionContext without references IronRuby

**URL:** <https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250>\
**Category:** IronRuby\
**Created:** [June 24, 2008, 2:23am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250 "2008-06-24T02:23:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [June 24, 2008, 2:23am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250/1 "2008-06-24T02:23:50Z")

</div>

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](http://Blog.BenHall.me.uk)

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [June 24, 2008, 2:54am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250/2 "2008-06-24T02:54:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [June 24, 2008, 3:35am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250/3 "2008-06-24T03:35:50Z")

</div>

We might define some library method that will look-up the scope’s  
variables explicitly to enable this scenario.  
As a workaround, this should work:

string startingBlock = @"  
$scope = self  
p $scope.customers  
";

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  
";

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [June 24, 2008, 3:21am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250/4 "2008-06-24T03:21:11Z")

</div>

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 H.'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 M.

---

<div class="post-metadata">

**Author:** ![benhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/8e7dd6/32.png) [@benhiller](https://www.ruby-forum.com/u/benhiller)\
**Post date:** [June 24, 2008, 3:38am UTC](https://www.ruby-forum.com/t/executioncontext-without-references-ironruby/141250/5 "2008-06-24T03:38:47Z")

</div>

Sorry, pressed Ctrl+Enter before finished.  
You can use global $scope.customers in your implementation of  
method\_missing to access customers.

Tomas
