2
給定以下工作代碼。F#:從函數返回聯合類型
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
函數Test具有預期的返回類型(形狀 - >形狀)。 如果我再改試驗的定義略有...
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