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