JavaScriptに対するReasonMLの利点の1つは、参照の同等性ではなく構造的な同等性を使用するMap
型を提供することです。
しかし、その使用例は見つかりません。
たとえば、文字列から整数へのマップである型scores
をどのように宣言しますか?
/* Something like this */
type scores = Map<string, int>;
そして、どのようにインスタンスを構築しますか?
/* Something like this */
let myMap = scores();
let myMap2 = myMap.set('x', 100);
標準ライブラリMap
は、特定のキータイプのマップモジュールを構築するために使用する必要があるモジュールファンクターであるという点で、プログラミング言語の世界では実際には非常にユニークです(および APIリファレンスドキュメントはしたがって、Map.Make
)の下にあります:
module StringMap = Map.Make({
type t = string;
let compare = compare
});
type scores = StringMap.t(int);
let myMap = StringMap.empty;
let myMap2 = StringMap.add("x", 100, myMap);
特に文字列キーが必要な場合は、マップのような機能を構築するために使用できる他のデータ構造があります。 BuckleScriptクックブックのさまざまなメソッドの比較 があります。 Js.Dict
を除くすべては、BuckleScriptの外部で利用できます。 BuckleScriptには ベータ標準ライブラリの新しいMapデータ構造 も付属していますが、これはまだ試していません。
Map<string, int>
だけを扱っている場合は、BeltのMap.String
でうまくいきます。
module MS = Belt.Map.String;
let foo: MS.t(int) = [|("a", 1), ("b", 2), ("c", 3)|]->MS.fromArray;
ベルトバージョンの人間工学は少し痛みが少なく、起動するための不変のマップです!ベルト内にはMap.Int
もあります。他のキータイプについては、独自のコンパレータを定義する必要があります。これは、上記の2ステッププロセス@glennslに似たものに戻ります。