2
다음 작업 코드가 주어집니다.F # : 함수에서 Union 형식 반환
type Square =
{ Foo : int }
type Circle =
{ Bar : int }
type Shape =
| Square of Square
| Circle of Circle
let Test x =
match x with
| Square { Foo = f } ->
Circle { Bar = f + 1 }
| Circle { Bar = f } ->
Circle { Bar = f + 2 }
let a = Square { Foo = 1 }
let b = Test a
let c = Test b
기능 테스트에는 예상되는 반환 유형 (Shape -> Shape)이 있습니다. 그때 약간에 테스트의 정의를 변경하면 ...
let Test x =
match x with
| Square { Foo = f } ->
{ Bar = f + 1 }
| Circle { Bar = f } ->
{ Bar = f + 2 }
테스트 기능 변화의 서명 모양 -> 원과 마지막 줄
let c = Test b
지금 컴파일되지 않습니다. Test의 두 번째 정의가 왜 작동하지 않습니까? 테스트 기능의 서명이 변경되는 이유는 무엇입니까?
모양이 원이 아니기 때문에 –
'{Bar = f + 1} '편집에 대한 정교한 표현은 원형이 아니라 도형입니다. –
작업 정의에서 원이 아닌가? – Craig