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

Cory Foy Cory.Foy at microsoft.com
Fri Sep 28 11:02:28 EDT 2007


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/e69beed1/attachment-0001.html 


More information about the Ironruby-core mailing list