문제

안녕하세요, 좋은 저녁, 누군가가 도울 수 있기를 바랍니다.

나는 일종의 스크립팅 지원을 받으려고 노력하고 있습니다. 루비 메소드를 실행하고 결과를 반환하는 다음 코드가 있습니다. 그러나 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"), 일이 잘 작동합니다. 그러나 표준 라이브러리를 참조하는 것을 실행할 때 (이 예에서 스왑 가면) 오류를 반환합니다.

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

코드를 실행합니다 ir.exe 문제없이 작동합니다.

도서관을 참조해야합니까? 그렇게하면 어떻게해야합니까?

누군가가 도울 수 있기를 바랍니다! 매우 감사합니다.

친절한 안부,
마르코

도움이 되었습니까?

해결책

루비 스트링에는 CLR 문자열과 호환되지 않는 의미론이 있습니다. 특히, 그들은 변이 가능합니다. Ruby Strings와 CLR 문자열 사이의 인터 로프는 아직 완성되지 않았으므로 지금은 C# 코드 또는 Ruby 코드에서 Ruby String 객체에 명시 적으로 CLR 시스템을 캐스팅해야합니다.

가장 간단한 솔루션은 다음과 같이 스왑 가스를 정의하는 것입니다.

def swapcase(a)
  String.new(a).downcase
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top