Ich habe von this question gelernt, dass es möglich ist, Mustererkennung mit Datensätzen zu verwenden. Ich habe jedoch bemerkt, dass ich Probleme habe, verschiedene Arten von Datensätzen zu finden.Ambiguität mit Musterabgleich Datensätze
Mein Ziel in diesem Beispiel ist es, in der Lage zu sein, zwischen verschiedenen Datensätzen zu unterscheiden. Mir wurde ein Datensatz gegeben, bei dem ich nicht ganz sicher bin, um welchen Typ es sich handelt, und ich versuche, es mithilfe des Mustervergleichs herauszufinden.
Hier ist ein vereinfachtes Beispiel:
module IceCream = struct
type t = {
temperature: float;
toppings: string list;
}
end
module Candy = struct
type t = {
flavour: string;
colour: string;
volume: int;
}
end
(* Could be Candy or IceCream *)
let example =
{ Candy.
flavour = "mint";
colour = "green";
volume = 10 }
let printFavoriteTreat treat = match treat with
| { Candy.
flavour = "mint";
colour;
volume } -> "It's Candy"
| { IceCream.
temperature;
toppings } -> "It's IceCream"
let() = printFavoriteTreat example
Wenn ich versuche, diese Datei zu erstellen, erhalte ich:
Error: The field IceCream.temperature belongs to the record type IceCream.t
but a field was expected belonging to the record type Candy.t
ist so etwas wie dies möglich machen?
Pattern-Matching für verschiedene Typen ist nicht möglich, es sei denn, sie sind in einen Summentyp eingebettet (auch Variantentyp, algebraischer Datentyp, diskriminierte Union). – didierc