«Неизвестный метод» с использованием IronRuby в C # - PullRequest
0 голосов
/ 19 марта 2009

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

Я пытаюсь получить поддержку сценариев. У меня есть следующий код, который выполняет метод 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 работает без проблем.

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

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

С уважением,
Marco

1 Ответ

2 голосов
/ 19 марта 2009

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

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

def swapcase(a)
  String.new(a).downcase
end
...