2013-06-10 3 views
3

가 나는 오류 Unexpected type arguments을 수있는 마지막 'T에 다음 코드"예상치 못한 형식 인수"의 의미는 무엇입니까?

module File1 

    let convert<'T> x = x 

    type myType() = 
     member this.first<'T> y = 
      convert<'T> y 
     member this.second<'T> ys = 
      ys 
      |> Seq.map this.first<'T> 

있습니다. 예를 들어 let x = myType.first<int> "34"으로 전화하면 경고가없고 모든 것이 예상대로 작동합니다. 형식 인수를 벗어나면 경고가 제거되고 프로그램은 의도 한대로 동작합니다.

여기에 무슨 일이 일어 났는지 설명 할 수 있습니까?

감사 한마디로

답변

4

, 당신은 형식 인수와 방법에 대해 명시 적으로 인수를해야합니다. 오류가 오류가 this excellent answer에 매우 명확하게 설명

ys 
|> Seq.map (fun y -> this.first<'T> y) 

ys 
|> Seq.map this.first<'T> 

을 변경하여 고정 할 수있다, 난 여기가 반복되지 않습니다. F # 2.0과 F # 3.0간에 오류 메시지가 변경되었습니다.

실제로는 'T을 형식 시그니처에 사용하지 않으므로 아무 문제없이 'T을 제거하면됩니다.

쿼리에 대한 유형이 필요한 경우 위의 Tomas 대답에서 기술을 사용하는 것이 좋습니다.

type Foo() = 
    member this.Bar (t:Type) (arg0:string) =() 

let f = new Foo() 
"string" |> f.Bar typeof<Int32> 
+0

감사합니다. – Remko