2009-03-18 2 views
0

Привет и добрый вечер, надеюсь, кто-то может помочь.«Неизвестный метод» с использованием 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 работ без каких-либо проблем.

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

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

С наилучшими пожеланиями,
Marco

ответ

2

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

Самым простым решением является определение swapcase так:

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

Хорошо, спасибо большое Курта! Это отлично работает ... – Marco

Смежные вопросы