[Ironruby-core] scope.SetVariable weirdness with instance_eval

Ivan Porto Carrero ivan at flanders.co.nz
Thu Nov 19 13:51:02 EST 2009


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>


More information about the Ironruby-core mailing list