동적 언어 런타임 (DLR) 개체를 문자열 표현으로 변환하는 일반적인 방법이 있습니까? 예를 들어, 다음 OBJ가 (이 경우, 파이썬) 특정 유형의 몇 가지 검사하는 예입니다 IronPython의 (C#에서 DLR 표현을 얻는 방법은 무엇입니까?
if (obj is IronPython.Runtime.List) {
repr = ((IronPython.Runtime.List)obj).__repr__(
IronPython.Runtime.DefaultContext.Default);
} else if (obj is IronPython.Runtime.PythonDictionary) {
repr = ((IronPython.Runtime.PythonDictionary)obj).__repr__(
IronPython.Runtime.DefaultContext.Default);
하지만 난 정말 그 자신의 언어로 OBJ의 표현을 좀하고 싶습니다, IronRuby 등)를 사용하고 각 유형별로 비교할 필요가 없습니다. obj.ToString()은 대부분의 객체를 잘 나타내지 않습니다.
그럼 언어마다 하나의 표현을 얻을 수 있습니다 (__repr__이 존재한다면 to_s가 존재하고 그렇지 않으면 ToString). 그러나 구체적인 방법은 없습니다. 당신이 할 수있는 최선의 방법은 언어에 상응하는 "ToString"목록을 가지고 그것들 모두를 검사하는 것입니다. 그러나 각 객체 유형을 별도로 관리하는 것과 같이 필요하지는 않습니다. –
IronPython 개체에서 작동합니다. 모두 C#에서 "__repr__"메서드가있는 것 같습니다. 그러나 IronRuby 개체에는 C# 수준에서 "to_s"메서드가있는 것으로 보이지 않습니다. –
'Object' 클래스 (http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_s)에있는 이유를 알 수 없습니다. 루비를 많이하지 않습니다. 파이썬이지만, 내가 아는 것은 모든 루비 객체가'to_s' 메소드를 노출해야한다는 것입니다. 또한'__repr__'과 동등한 것은'inspect' (http://ruby-doc.org/core-1.9.3/Object.html#method-inpectpect)이고'to_s '는 파이썬에서'__str__'과 같은 기능을합니다. –