나는 쓰기를 시도하고 무엇 :F #에서 여러 제약 조건을 만족하는 형식을 반환하는 제네릭 함수를 선언하는 방법?
type A() =
interface IX with ...
interface IY with ...
type B() =
interface IX with ...
interface IY with ...
let mk t : 'T when 'T :> IX and 'T :> IY =
match t with
| Choice1 -> new A()
| Choice2 -> new B()
참고 MK의 반환 유형에 유형 제약. 그것은 컴파일하지 않지만 컴파일러는 A와 B를 'T'로 변환 할 수 없다는 불평을합니다.
그냥 재미로 C# http://pastebin.com/daFFKTwB에서 해당 코드를 비교하십시오. 구체적인 유형의 'T'를 반환하려고하지만 나머지 함수에서 해당 유형을 사용하지 않습니다. 콘크리트 A 또는 B를 반환하려고 시도하며 형식 검사기는 당신은 정말로 의도했습니다. – Juliet
추가 고려 사항 :'let x, y = mk Choice1, mk Choice2'라고 쓰면'x'와'y'에는 어떤 타입이 있습니까? – Juliet
맞아, 나는 "A is a T"와 "B is-a T"라고 생각하고 있었지만,이 문장들이 독립적으로 고려 될 때만 정확하다. Tomas의 해법은 두 경우 모두 T가 동일하다는 요구를 완화하고 kvb의 해는 두 경우를 모두 만족시키는 새로운 유형 T를 도입합니다. – Joh