Warum kompiliert diese aktive Musterverwendung nicht?Warum kompiliert diese aktive Musterverwendung nicht?
Ich erhalte einen Fehler auf der folgenden:
match cell1 cell2 with
| CellsAreDifferent -> isValueNeighbor cell1.X cell2.X
&& isValueNeighbor cell1.Y cell2.Y
| CellsAreSame -> false
Typenkonflikt. Erwartet eine Zelle -> Wahl < 'a,' b> aber gegeben Zelle -> Zelle -> Wahl Der Typ 'Wahl <' a, 'b>' stimmt nicht mit dem Typ 'Zelle -> Wahl'
überein
Der Code ist hier:
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
ich diesen documentation zu verweisen versuchte.
So kann Fis nur Muster auf einem einzelnen Eingangsanpassungsdurchführen? –
Jede Musterübereinstimmung nimmt einen einzelnen Wert an. Ein aktives Muster nimmt den einzelnen Wert auf, auf den abgestimmt werden soll, aber es kann dann auch weitere Parameter annehmen (nur für partielle aktive Muster, denke ich). – TheQuickBrownFox