0

こんにちは、こんばんは、誰かが助けてくれることを願っています。

ある種のスクリプトサポートを利用しようとしています。私は次のコードを持っています。これは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")、うまく機能します。ただし、標準ライブラリ(この例ではスワップケース)への参照があるものを実行すると、エラーが返されます

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

コードを実行してir.exeも問題はありません。

ライブラリへの参照を作成する必要がありますか?参照する場合、どうすればよいですか?

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

よろしく、
マルコ

4

1 に答える 1

2

Ruby 文字列には、CLR 文字列と互換性のないセマンティクスがあります。特に、それらは変更可能です。Ruby 文字列と CLR 文字列の間の相互運用性はまだ完全ではないため、現時点では、C# コードまたは Ruby コードのいずれかで、CLR System.String を Ruby 文字列オブジェクトに明示的にキャストする必要があります。

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

def swapcase(a)
  String.new(a).downcase
end
于 2009-03-18T22:04:56.527 に答える