嗨,晚上好,希望有人可以提供帮助。
我正在努力获得某种脚本支持。我有以下代码,它执行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
运行代码没有任何问题。
我是否需要引用该库,如果我这样做,我该怎么做?
希望有人可以帮忙!非常感谢你。
亲切的问候,
马可
答案 0 :(得分:2)
Ruby字符串具有与CLR字符串不兼容的语义。特别是,它们是可变的。 Ruby字符串和CLR字符串之间的互操作尚未完成,因此现在您需要将CLR System.String显式地转换为Ruby字符串对象 - 无论是在C#代码中还是在Ruby代码中。
最简单的解决方案是定义如下的swapcase:
def swapcase(a)
String.new(a).downcase
end