2011-11-14 2 views
1

과 비슷한 일반 인터페이스로 객체를 캐스팅하려고합니다.obj를 일반적인 F # 인터페이스로 캐스팅

type IFetchData<'a> = 
    abstract FetchData: string -> seq<'a> 

내 사용 예제는 그러나 FSI에서 다음과 같습니다 :

let sample = new Sample() 
let box_sample = box(sample) //simulate reflection type that implements interface 
let result = unbox<IFetchData<_>>(box_sample) //value restriction 
let result2: IFetchData<_> = unbox<IFetchData<_>>(box_sample) //value restriction 

나는 형의 멤버 FetchData의 동적 호출을 달성하기 위해 노력하고있어. 그래서 IFetchData 유형이 < _ _이되면 일반 유형이 실제로 무엇인지 알아야 할 필요가있는 FetchData 회원을 호출하고 싶습니다.

내가받는 오류는 값 제한 오류입니다. 도움이 될 것입니다.

감사합니다.

답변

2

주변에 일반적인 용어를 사용할 수는 없지만 컴파일러가 구체적인 유형을 유추 할 수 있다면 괜찮습니다. 오류 메시지가 상태로 다른 방법으로,이 같은 함수로 변환 할 수 있습니다 그렇지 않으면

let result() = unbox<IFetchData<_>>(box_sample) 

당신이 무엇인지 알 필요가 여기에 있지만, 당신은

let result2 = unbox<IFetchData<char>>(box_sample) 

같은 결과에 대한 구체적인 형식이 필요합니다 사전에 언 박싱하십시오.

또는 코드가 나중에 사용법에 따라 구체적인 유형을 추론 할 수 있으면 괜찮을 것입니다.

+0

아! 고마워요. 나는 컴파일러를 만족시키기 위해 내가해야 할 것을 지금 본다. :) – cameron

관련 문제