Section 15.3 of the spec은 공백이있는 < >
시퀀스가 허용되는 형식임을 나타냅니다. 이는 다음과 같은 기이함을 허용하는 일반 인수의 빈 목록을 나타냅니다.일반 인수가 빈 목록
type A() = class end
let a = new A< >()
왜 허용됩니까? 제네릭 형식은 형식 args가 생략 된 상태에서 인스턴스화 될 수 있으므로이 형식 검사는 형식 최적화입니까?
Section 15.3 of the spec은 공백이있는 < >
시퀀스가 허용되는 형식임을 나타냅니다. 이는 다음과 같은 기이함을 허용하는 일반 인수의 빈 목록을 나타냅니다.일반 인수가 빈 목록
type A() = class end
let a = new A< >()
왜 허용됩니까? 제네릭 형식은 형식 args가 생략 된 상태에서 인스턴스화 될 수 있으므로이 형식 검사는 형식 최적화입니까?
라몬 (Ramon)은 일을보다 일관성있게 만든다는 점에 동의합니다. 제네릭 형식을 제너릭 방식의 퇴화 사례로 취급 할 수 있다는 점에서 동의합니다. 제네릭 방식으로 "오버로드"되는 유형의 경우이 당신이 언급하고있는 유형에 대한 자세한 명시 할 수 있습니다 :
type T(o:obj) = class end
type T<'t>(t:'t) = class end
let t = T("test")
let t' = T< >("test")
let t'' = T<_>("test")
오버로드 확인에 대해 신중하게 생각하지 않고, t
가 무슨 타입 반드시 분명 아니지만,이 t'
및 t''
이 가진 어떤 종류의 완전히 분명하다.
좋은 예입니다. 유스 케이스를 내놓으려고 애썼다. – Daniel
나는 그것이 단지 일관성을위한 것이라고 생각합니다. List<int>
과 Dictionary<string, bool>
을 할 수 있으므로 int< >
도 할 수 있습니다.
어떻게 일관성이 있습니까? 'List'와'Dictionary'는 generic입니다. int는 그렇지 않습니다. – Daniel
당신은 잘못된 길로 그것을보고 있습니다. (글쎄, 그것은 올바른 길입니다.하지만 그들이 생각한 바를 이해하기 위해서는 잘못된 길입니다.) ''List''는 1 개의 일반적인 인자를 가지고 있으므로''< >''에서 하나의 항목을 얻습니다.''Dictionary''는 2를 가지므로 2 개의 항목을 가져오고''int''는 0이므로 항목이 0이됩니다. . 그것을 불공평하게 생각하는 대신에 ("사랑스러운 형용사"), 일반적인 것인가, 아니면 "일반적인 인자가 얼마나 많은지"로 생각하십시오. –
명확히하기 : 나는 그 구문을 사용해야한다고 생각하지 않지만,이 이유 때문에 거기에 있습니다. –
구체적으로 가야하는 이유를 생각해서 금지시킬 수 있습니까? –
@Tomalak : 예. 타입 인자는 비 - 제네릭 클래스에는 적용되지 않습니다 ?? – Daniel
@Tomalak : 유형 인자가 클래스에 명시 적이어야하므로 더 이상한 것처럼 보입니다. 그 경우가 아니라면 클래스가 일반적이지 않음을 나타내는 데 유용하다는 것을 알 수있었습니다. – Daniel