为什么这种活动模式用法不能编译?
我收到以下错误:
match cell1 cell2 with
| CellsAreDifferent -> isValueNeighbor cell1.X cell2.X
&& isValueNeighbor cell1.Y cell2.Y
| CellsAreSame -> false
类型不匹配。期待一个 细胞 - >选择与LT;“一” B个但给了一个 细胞 - >细胞 - >选择类型'选择<'a,'b>'与“Cell - >类型不匹配选择'
代码在这里:
let (|CellsAreSame|CellsAreDifferent|) cell1 cell2 =
match cell1.X <> cell2.X
|| cell1.Y <> cell2.Y with
| true -> CellsAreDifferent
| false -> CellsAreSame
let isNeighbor cell1 cell2 =
let isAbsNeighbor v1 v2 =
match abs (v1 - v2) with
| 0 | 1 -> true
| _ -> false
let isValueNeighbor v1 v2 =
match v1 >= 0
&& v2 >= 0 with
| true -> isAbsNeighbor v1 v2
| _ -> isAbsNeighbor v2 v1
match cell1 cell2 with
| CellsAreDifferent -> isValueNeighbor cell1.X cell2.X
&& isValueNeighbor cell1.Y cell2.Y
| CellsAreSame -> false
我试图引用此documentation。
答案 0 :(得分:4)
在这里,您尝试匹配cell1 cell2
。
这是一个值,因为它试图将值用作函数。
我认为最好的解决方案是改成元组。
像
这样的东西let (|CellsAreSame|CellsAreDifferent|) (cell1, cell2) =
和
match (cell1, cell2) with