为什么这个活动模式用法不能编译?

时间:2016-03-20 23:27:01

标签: f#

为什么这种活动模式用法不能编译?

我收到以下错误:

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

1 个答案:

答案 0 :(得分:4)

在这里,您尝试匹配cell1 cell2

这是一个值,因为它试图将值用作函数。

我认为最好的解决方案是改成元组。

这样的东西
let (|CellsAreSame|CellsAreDifferent|) (cell1, cell2) =

match (cell1, cell2) with