[Ironruby-core] Passing a .NET object to the RubyEngine...

Tomas Matousek Tomas.Matousek at microsoft.com
Fri Sep 28 15:45:32 EDT 2007


This is part of the hosting API we provide for host applications so that they can pass objects to and from a dynamic language (be it Ruby or Python), execute some code within some scope etc.

This API gradually undergoes major changes and it isn't fully compatible with Ruby's semantics today. We already have some design on "paper" (needs to be polished/reviewed still) that makes it right. It's implementation will take some time though. The code bellow should kind of work (there is a little tweak to the variable binding in the Ruby compiler to allow it) until we provide some better way. Good news is that we found a way how to do the integration right for Ruby, so all features listed above (passing objects there and back, executing code, etc) will be available in future.

Tomas

From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Cory Foy
Sent: Friday, September 28, 2007 8:02 AM
To: ironruby-core at rubyforge.org
Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine...

That's what I was thinking too. Here's what I put together:

class Program
{
    static void Main(string[] args)
    {
         RubyEngine re = RubyEngine.CurrentEngine;
         IScriptModule scriptModule = ScriptDomainManager.CurrentManager.Host.DefaultModule;
         string script = "require 'CSIronRuby'; puts 'Hello, ' + var.GetName.to_s + ' World!'";
         MyName name = new MyName();
         scriptModule.SetVariable("var", name);
         re.ExecuteCommand(script, scriptModule);
         Console.ReadLine();
    }
}

public class MyName
{
    public string Name = "Cory";

    public string GetName()
    {
         return Name;
    }
}

For some reason, I was having difficulty getting it to output just Name - I just didn't want to tear into it.

Cory

From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Stefan Hüttenrauch
Sent: Friday, September 28, 2007 10:49 AM
To: ironruby-core at rubyforge.org
Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine...

Nice stuff Eric,

Have you already passed real objects back and forth between Ruby and C#?? That would be the real cool stuff. I will hack a little tomorrow I guess, but if you have any tips already, that would be great.

Thanks
Stefan

From: ironruby-core-bounces at rubyforge.org [mailto:ironruby-core-bounces at rubyforge.org] On Behalf Of Eric Nicholson
Sent: Freitag, 28. September 2007 15:40
To: ironruby-core at rubyforge.org
Subject: Re: [Ironruby-core] Passing a .NET object to the RubyEngine...

Whoops ... missing some semicolons there.  Can you tell I spend most of my day in VB.NET<http://VB.NET>?
On 9/28/07, Eric Nicholson < enicholson at gmail.com<mailto:enicholson at gmail.com>> wrote:
Here's a quick example:

RubyEngine re = RubyEngine.CurrentEngine;
IScriptModule mod = ScriptDomainManager.CurrentManager.Host.DefaultModule

  string script = "puts 'Ruby and ' + var.to_s + ' together at last'"

 mod.SetVariable("var", ".NET")

  re.ExecuteCommand(script, mod);
A couple things to note:
1. var.to_s is necessary because I don't think IR is coercing CLR Strings to Ruby Strings yet.
2. I'm not sure why you need to pass in the default module to ExecuteCommand, but I wasn't able to evaluate the variable in Ruby otherwise.

-Eric
On 9/28/07, Phil Haack <haacked at gmail.com<mailto:haacked at gmail.com>> wrote:

Hi All, I posted some code for calling IronRuby code I found in the mailing list onto the wiki.



http://ironruby.rubyforge.org/wiki/wiki.pl?ExecutingIronRubyFromCSharp



  RubyEngine re = RubyEngine.CurrentEngine;

  string script = "s = 'let us get started'" + Environment.NewLine

    + "i = s.length");

  re.ExecuteCommand(script);



The only thing is, I don't know how to pass a .NET object to the context of the RubyEngine so it can be called from within the script. I'd like to update the example with that.



Any help?



Phil

_______________________________________________
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/20070928/edea60fb/attachment-0001.html 


More information about the Ironruby-core mailing list