Ivan Porto Carrero
2009-Nov-19 18:21 UTC
[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
Twitter: http://twitter.com/casualjim
Author of IronRuby in Action (http://manning.com/carrero)
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20091119/630c9163/attachment.html>
Tomas Matousek
2009-Nov-19 18:45 UTC
[Ironruby-core] scope.SetVariable weirdness with instance_eval
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] 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)
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20091119/e8a086a9/attachment-0001.html>
Ivan Porto Carrero
2009-Nov-19 18:51 UTC
[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 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> 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] *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 > Twitter: http://twitter.com/casualjim > Author of IronRuby in Action (http://manning.com/carrero) > > _______________________________________________ > Ironruby-core mailing list > 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/f4ca7e14/attachment.html>
Tomas Matousek
2009-Nov-19 19:12 UTC
[Ironruby-core] scope.SetVariable weirdness with instance_eval
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>
Ivan Porto Carrero
2009-Nov-19 19:47 UTC
[Ironruby-core] scope.SetVariable weirdness with instance_eval
I just assumed (<== error right there) that
scope.SetVariable("the_var", "the value");
did the same under the covers as
the_var = "the value"
so that it would be a real globally scoped variable, this probably makes
more sense once you know how it works. This is also perfect timing for a
call-out in this particular chapter :) Tomas says...
But I''ve been caught out a few times now, I think I just need to take
some
time to look into the internals of IronRuby again, because I can figure this
sort of stuff out by looking at the source code.
I have no bright ideas at this point, I rarely do.
---
Met vriendelijke groeten - Best regards - Salutations
Ivan Porto Carrero
Blog: http://flanders.co.nz
Google Wave: 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 8:12 PM, Tomas Matousek <
Tomas.Matousek at microsoft.com> wrote:
> 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
> 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> 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] *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
> Twitter: http://twitter.com/casualjim
> Author of IronRuby in Action (http://manning.com/carrero)
>
>
> _______________________________________________
> 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://rubyforge.org/pipermail/ironruby-core/attachments/20091119/2c9b2a26/attachment.html>