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"),一切正常。但是,当运行引用标准库的东西时(本例中为swapcase),它将返回错误

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

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

我是否需要参考图书馆,如果需要,我该怎么做?

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

亲切的问候,
马可

4

1 回答 1

2

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

最简单的解决方案是像这样定义 swapcase:

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