왜 다음 코드가 컴파일되지 않습니까? 그것은 컴파일러 버그 또는 언어 기능입니까? 가장 좋은 해결 방법은 무엇입니까?generics 관련 문제
type A() as this =
let a = this.GetTypedObject<int>() // a
let b = this.GetTypedObject<string>() // b
member this.GetTypedObject<'T>() =
Unchecked.defaultof<'T>
Unchecked.defaultof < 'T>는 단지 어떤 함수 또는 생성자 콜 대신 사용될 수있는, 예를 들어 사용된다.
컴파일러는 코드가 라인 (a)에서 덜 일반화되고 라인 (b)을 컴파일하는 것을 거부합니다. 러시아어로되어 있기 때문에 정확한 컴파일러 메시지를 제공 할 수 없습니다. :).
GetTypedObject()를 바인딩 바인딩으로 바꾸고 < 'T>을 (를) 제거하면 다른 컴파일러 경고로 끝나고 나도 좋아하지 않습니다. 내가 찾은 유일한 wokaround는 GetTypedObject < 'T>()을 기본 클래스로 이동하고 public으로 만드는 것입니다. 사전에 감사 ... 형식 유추 이후
감사합니다. 나를 위해 매력처럼 일했습니다. – Alexander
그리고 훌륭한 설명! – Alexander