2009-03-18 7 views
0

こんにちは、良い夜、誰かが助けることを願っています。CでIronRubyを使用している「不明なメソッド」

私は何らかのスクリプトのサポートを受けようとしています。私は次のコードを持っています。これはrubyメソッドを実行し、結果を返します。ただし、IronRuby自体から「メソッドが見つかりませんでした」というエラーが返されています。

var engine = IronRuby.Ruby.CreateEngine(); 
returnvalue = engine.Operations.InvokeMember(instance, method, arg).ToString(); 

私はテストとして、次のRubyコードを実行しています:

class Plotlight 
def get_message(a) 
res = "Hello- from Ruby " << a 
res 
end 

def swapcase(a) 
res = a.downcase 
res 
end 
end 

の方法get_message("something")を実行しているときに、物事は素晴らしい仕事。 (この例ではswapcase)標準ライブラリへの参照を持っている何かを実行している場合しかし、それは何の問題もなくir.exe作品を通して、コードの実行中にエラー

$exception {"undefined method `downcase' for fooBAR:ClrString"} System.Exception {System.MissingMethodException} 

を返します。

ライブラリへの参照をする必要があります。どうすればいいですか?

誰かが助けてくれることを願っています!どうもありがとうございました。

敬具、
マルコ

答えて

2

Rubyの文字列は、CLR文字列と互換性のない意味を持っています。特に、それらは変更可能です。 Ruby文字列とCLR文字列の間のInteropはまだ完成していませんので、C#コードまたはRubyコードのいずれかに、CLR System.StringをRuby文字列オブジェクトに明示的にキャストする必要があります。

最も簡単な解決策は、このようswapcaseを定義することです:

def swapcase(a) 
    String.new(a).downcase 
end 
+0

さてさて、非常に多くのカートをありがとうございました!これは素晴らしい作品です... – Marco

関連する問題