2011-01-07 4 views
3

간단한 질문이 있습니다. 왜 이것이 작동하지 않습니까?F를 사용하는 유형 멤버의 튜플 #

type Test1() = 
    member o.toTuple = 1.,2.,3. 

type Test2() = 
    member o.test (x: float, y: float, z: float) = printfn "test" 
    member o.test (x: Test1) = o.test x.toTuple 

오류 :

유형의 제약 조건이 일치하지 않습니다. 유형 플로트 * 플로트 * 플로트 Test1을 입력 유형 '플로트 * 플로트 * 플로트'와 호환되지 않습니다 유형 'Test1을'

유형 '플로트 * 플로트와 호환되지 않습니다 * 플로트 test 이외의 다른 Type2에서 첫 번째 방법의 이름을 변경 Test1을 '

답변

5

과부하의 경우 첫 번째 멤버 테스트가 다중 인수 메서드로 간주되므로이 방법은 작동하지 않습니다. 당신이 tupled을해야하는 경우 , 당신은 여분의 괄호를 추가 할 필요가 : 돈 사임 here

type Test2() = 
    member o.test ((x: float, y: float, z: float)) = printfn "test" 
    member o.test (x: Test1) = o.test x.toTuple 

참조 설명. 설명은

type Test2() = 
    member o.test (x: float, y: float, z: float) = printfn "test" 
    member o.test (x: Test1) = let a,b,c = x.toTuple in o.test(a,b,c) 
+0

감사합니다 : 당신이 여분의 괄호를 추가하지 않으려면, 당신은 여전히 ​​튜플을 해체하고 여러 인수 전화를 사용할 수있는

주 –

4

'유형과 호환되지 않습니다 '. 두 번째 방법은 첫 번째 방법은 섀도 잉하므로 컴파일러가 혼란 스럽습니다.

type Test1() = 
    member o.toTuple = 1.,2.,3. 

type Test2() = 
    member o.print (x: float, y: float, z: float) = printfn "test" 
    member o.test (x: Test1) = o.print x.toTuple