题
嗨,晚上好,希望有人能提供帮助。
我正在尝试获得某种脚本支持。我有以下代码,该代码执行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
没有任何问题。
我需要参考图书馆,如果这样做,我该怎么做?
希望有人可以帮助!非常感谢。
亲切的问候,
马可
解决方案
Ruby Strings具有与CLR字符串不相容的语义。特别是它们可变。 Ruby Strings和CLR字符串之间的互动尚未完成,因此,现在您需要明确地施放CLR System.String进入Ruby String对象 - 在您的C#代码或Ruby代码中。
最简单的解决方案是定义这样的Swapcase:
def swapcase(a)
String.new(a).downcase
end
不隶属于 StackOverflow