Неизвестный метод с использованием IronRuby в C#

Привет и добрый вечер, надеюсь, кто-то может помочь.

Я пытаюсь получить какую-то поддержку сценариев. У меня есть следующий код, который выполняет рубиновый метод и возвращает результат. Однако он возвращает ошибку «метод не найден» от самого IronRuby.

var engine = IronRuby.Ruby.CreateEngine();
returnvalue = engine.Operations.InvokeMember(instance, method, arg).ToString();

Я запускаю следующий рубиновый код в качестве теста:

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 работает без проблем.

Нужно ли делать ссылку на библиотеку, и если да, то как это сделать?

Надеюсь, кто-то может помочь! Большое спасибо.

С уважением,
Марко


person Marco    schedule 18.03.2009    source источник


Ответы (1)


Семантика строк Ruby несовместима со строками CLR. В частности, они изменчивы. Взаимодействие между строками Ruby и строками CLR еще не завершено, поэтому сейчас вам нужно явно преобразовать CLR System.String в строковый объект Ruby — либо в коде C#, либо в коде Ruby.

Самое простое решение — определить swapcase следующим образом:

def swapcase(a)
  String.new(a).downcase
end
person Curt Hagenlocher    schedule 18.03.2009