inserted = ctxt

calls a “ctxt” method on “self”. The hosting API injects method_missing into 
the top-level singleton – you can see it by printing p 
self.method(:method_missing).
The implementation of that method_missing looks into the scope for variables.

In the latter case, I assume, you instance_eval the block against some object, 
right? Hence ctxt is an invocation on that object, which has no relationship 
with the scope.

Testing.new do
  context ctxt
  print
end

Tomas

From: ironruby-core-boun...@rubyforge.org 
[mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Ivan Porto Carrero
Sent: Thursday, November 19, 2009 10:21 AM
To: ironruby-core
Subject: [Ironruby-core] scope.SetVariable weirdness with instance_eval

Hi

Consider the following code:

public class Item
{
   public string Title  {
                        get;
                        private set;
   }

   public Item(string title){ Title = title; }
}

var _engine = Ruby.CreateEngine();
var context = new Item("The greatest item ever");

var scope = _engine.CreateScope();
scope.SetVariable("ctxt", item);
_engine.ExecuteFile("path\to\file.rb", scope);

And the following ruby class:

class Testing

  def initialize(&b)
    instance_eval(&b)
  end

  def context(ctxt)
    @ctxt = ctxt
  end

  def print
    puts @ctxt.title
  end

end

Then this works when put at the bottom of the file:

inserted = ctxt
Testing.new do
  context inserted
  print
end

but this doesn't:

Testing.new do
  context ctxt
  print
end


That doesn't seem right or does it? so I've created an issue on codeplex with 
this content, if this is the way it's supposed to work then I'll delete the 
issue


---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: 
portocarrero.i...@googlewave.com<mailto:portocarrero.i...@googlewave.com>
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to