C# から IronRuby スクリプトの呼び出し(C#からIronRubyの変数に値を設定してみる)

| コメント(0) | トラックバック(0) このエントリーを含むはてなブックマーク

前回の C#からIronRubyスクリプトを呼び出してみる の記事を書いたが、続きについて書いてみる。

今回は、C#からIronRuby側に値を渡してみたいと思う。

 

参照の追加

以下のように参照を追加した。

20091129_ironruby_01.png

ソースコード

using System;
using Microsoft.Scripting.Hosting;


namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            // IronRubyエンジンオブジェクトの生成
            ScriptRuntime runtime = IronRuby.Ruby.CreateRuntime();
            var engine = runtime.GetEngine("rb");

            // 変数スコープの生成 と 変数への値の設定
            var scope = engine.CreateScope();
            scope.SetVariable("x", 123);

            // グローバル変数への設定
            IronRuby.Ruby.GetExecutionContext(engine).DefineGlobalVariable("xxx", 789);

            //スクリプトの実行
            var source = engine.CreateScriptSourceFromString(@"puts ""x is #{x}. $xxx is #{$xxx}."" ");
            source.Execute(scope);
            
            Console.ReadLine();
        }
    }
}

 

解説

engine.CreateScope();でスコープを作りそこに変数を設定していく。なお、グローバル変数はIronRuby.Ruby.GetExecutionContext(engine).DefineGlobalVariableを用い定義する。この時、rubyの命名規則 $ を先頭につける必要はないようである。あと「runtime.Globals.SetVariable("xxx", 567);」なる記述方法もあるらしいが、この方法は利用できないようである。

次に、スクリプト文字列からソースを作り、そのソースに先ほど生成&設定したスコープを渡し実行している。

「var source = engine.CreateScriptSourceFromString(@"puts ""x is #{x}. $xxx is #{$xxx}."" ");
」以外にも「var source = engine.CreateScriptSourceFromString("puts \"x is #{x}. $xxx is #{$xxx}.\" ");」や「var source = engine.CreateScriptSourceFromString(@"puts %!x is #{x}. $xxx is #{$xxx}.! ");」というようにして、ソースを渡す方法があるかと思う。

個人的には、最後の %!?!で囲む方式がすっきりしてていいような気もする。

さいごに

様々なバージョンのIronRubyを呼び出してみたが、今回の記述はすっきりしていると感じている。

なお上記コードはIronRubyな人に見てもらい、goodとの返事をいただいております。

詳細については、別途記載したいとおもいます。

トラックバック(0)

トラックバックURL: http://www.m-tea.info/mt-tb.cgi/28

コメントする

あわせて読みたいブログパーツ

このブログ記事について

このページは、k1ha410が2009年11月30日 00:56に書いたブログ記事です。

ひとつ前のブログ記事は「ネットワークファイルコピー中にWindows Server 2008 カーネルが高負荷(再調査編)」です。

次のブログ記事は「コンパクトデジカメ購入 OPTIOE70 」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。