[#49119] Ruby/Tk カーソル位置の移動方法について — masa masa <masamasa.ruby@...>
初めまして安藤と申します。
3 messages
2013/01/07
[#49131] [ANN] Ruby生誕20周年記念パーティのお知らせ — Kakutani Shintaro <shintaro@...>
一般社団法人日本Rubyの会のかくたにです。
6 messages
2013/01/15
[#49138] [ANN] Ruby 1.9.3 patchlevel 374 — "U.Nakamura" <usa@...>
Ruby ユーザーの皆様
3 messages
2013/01/17
[#49140] [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ — arton <artonx@...>
artonです。
7 messages
2013/01/18
[#49271] Re: [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ
— whiteleaf <2nd.leaf@...>
2013/03/12
whiteleaf です。
[#49272] Re: [ANN]Ruby-2.0.0-rc1, Ruby-1.9.3-p374 Windows用インストーラパッケージ
— Takahiro Kambe <taca@...>
2013/03/12
In message <CAGePti=3ArS8QeiAgt+B5t4StXdHZ6vuiz9d+=Ef-wk1M=WkDg@mail.gmail.com>
[#49148] Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます — Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
はじめまして。横塚と申します。
16 messages
2013/01/29
[#49150] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Urabe Shyouhei <shyouhei@...>
2013/01/29
On 01/29/2013 06:35 PM, Daisuke Yokotsuka wrote:
[#49154] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Daisuke Yokotsuka <yokots_d@...3-net.ne.jp>
2013/01/29
Shyouhei様
[#49156] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— Takeshi Iogawa <alpha@246.ne.jp>
2013/01/29
いおがわと申します。
[#49149] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— "Shota Fukumori (sora_h)" <sorah@...>
2013/01/29
sorahです。
[#49152] Re: Ruby 1.9で、バイト長の部分文字列を作りたくて悩んでます
— sunao tanabe <aib@...>
2013/01/29
たなべです。
[#49166] Enumerator#+ — 小田 利通 <oda@...>
13 messages
2013/01/31
[ruby-list:49124] RE: [ruby-list:49120] Re: [ruby-list:49118] IronRubyとC#の連携
From:
Shozo Arai <shozoa@...>
Date:
2013-01-08 08:39:34 UTC
List:
ruby-list #49124
反応が遅くなりました、荒井です。
>エラーについてはエラー内容を貼ったりしないと
私も同意です。
>https://gist.github.com/4474447
整理していただいて、有難うございます。
本件ですが、忘れていたことを思い出すよう努力していました。
結果ですが、以下のようにすると動作します。
ScriptEngine engine = Ruby.CreateEngine();
ScriptScope scope = engine.ExecuteFile("test.rb");
scope.SetVariable("x", "IronRuby 1.1.3");
var result = (string) engine.Operations.InvokeMember
(scope, "test", ".NET");
Console.WriteLine(result);
実は、test.rbが今回のような利用方法でハマる箇所になります。
def test (message)
"Hello #{message} !!! and #{self.x}"
end
メソッド名とパラメータの間に空白を入れるのがポイントです。
空白をいれないで「test(message)」と定義すると、InvokeMemberで
messageが定義されていないというエラーが出力されます。
多分、スクリプトファイルのエンコードなどが、関係しているような
気がします。
#私の所では、動くようになってからはどちらでも問題なく動作します。
#これ以上は、原因追及をしていません。
それから、今回のようなパターンであれば以下のように記述して
呼び出すこともできます。
Func<string, string> rubyMethod;
var x = scope.TryGetVariable("test", out rubyMethod);
var y = rubyMethod("ABC");
最後にIronRubyを使う上で気になった点を以下に記載します。
1.ir.exeの利用(irb相当)
このパターンであれば、ほぼ素直に利用することができます。
スクリプトから.NET Frameworkのライブラリや自分で作成した
ライブラリなども簡単に利用することができます。
2.C#/VBからの利用(組み込みパターン)
今回のようにir.exeで利用するのとは、異なる箇所が存在します。
詳しい使い方を把握するには、DLRというライブラリの構造を把握
する必要があります。DLRとは、IronPythonの開発から作成された
.NET用の動的言語用の共通ライブラリです。DLRのヘルパーとして
ScriptEngine、ScriptScopeなどを始めとしてホスティング用の
クラスが提供されています。
ScriptScopeは、変数などを管理するスコープの概念に近いものですが、
利用方法の実態となると実装言語に依存します(特にIronRubyは、実装
過程でIronPythonとは異なる利用方法になっています)。こうなって
いますので、詳細を把握するには、実装言語のソースを読むなりしないと
理解することも難しいです。
従って、組み込み利用はir.exeを使う場合よりも格段に難しいと
言えます。このような事を理解できれば、「「test(message)」と定義した
パターンでは、testメソッド呼び出すスクリプトを
engine.CreateScriptSourceFromStringメソッドで作成してから、
Executeメソッドで実行すればInvokeMemberでのエラーを回避することが
できます。
使い方によって、ご注意ください。
以上。