this questionから、パターンマッチングをレコードと併用することができたことを知りました。しかし、さまざまな種類のレコードに一致させるのに問題があることに気付きました。パターンマッチングレコードのあいまいさ
この例で私の目標は、異なるレコードを区別することです。私はそれがどのタイプなのかが完全にはわからないという記録を与えられています。パターンマッチングを使ってそれを理解しようとしています。
ここでは簡単な例です:
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
私は、このファイルを構築しようとした際、私が取得:
Error: The field IceCream.temperature belongs to the record type IceCream.t
but a field was expected belonging to the record type Candy.t
は、この可能性のようなものをしているのですか?
合計型(バリアント型、代数データ型、識別された共用体とも呼ばれます)に埋め込まれていない限り、異なる型のパターンマッチングはできません。 – didierc