[Ironruby-core] scope.SetVariable weirdness with instance_eval
Tomas Matousek
Tomas.Matousek at microsoft.com
Thu Nov 19 14:12:24 EST 2009
I’ve closed it. If you think there might be a better approach to exposing scope variables let us know.
Tomas
From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Ivan Porto Carrero
Sent: Thursday, November 19, 2009 10:51 AM
To: ironruby-core at rubyforge.org
Subject: Re: [Ironruby-core] scope.SetVariable weirdness with instance_eval
I tried closing the issue on codeplex but couldn't
http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3136
Thanks for the explanation
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: portocarrero.ivan at googlewave.com<mailto:portocarrero.ivan at googlewave.com>
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)
On Thu, Nov 19, 2009 at 7:45 PM, Tomas Matousek <Tomas.Matousek at microsoft.com<mailto:Tomas.Matousek at microsoft.com>> wrote:
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-bounces at rubyforge.org<mailto:ironruby-core-bounces at rubyforge.org> [mailto:ironruby-core-bounces at rubyforge.org<mailto:ironruby-core-bounces at 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.ivan at googlewave.com<mailto:portocarrero.ivan at googlewave.com>
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)
_______________________________________________
Ironruby-core mailing list
Ironruby-core at rubyforge.org<mailto: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/20091119/057bd342/attachment-0001.html>
More information about the Ironruby-core
mailing list