嗨,晚上好,希望有人能提供帮助。

我正在尝试获得某种脚本支持。我有以下代码,该代码执行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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top