在C#中使用IronRuby的“未知方法”

时间:2009-03-18 21:57:23

标签: c# ruby 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),它将返回错误

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

通过ir.exe运行代码没有任何问题。

我是否需要引用该库,如果我这样做,我该怎么做?

希望有人可以帮忙!非常感谢你。

亲切的问候,
马可

1 个答案:

答案 0 :(得分:2)

Ruby字符串具有与CLR字符串不兼容的语义。特别是,它们是可变的。 Ruby字符串和CLR字符串之间的互操作尚未完成,因此现在您需要将CLR System.String显式地转换为Ruby字符串对象 - 无论是在C#代码中还是在Ruby代码中。

最简单的解决方案是定义如下的swapcase:

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