You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Reason ML中声明Map类型?及字符串到整数Map的实现示例

Great question! Reason ML's Map module is a fantastic alternative to JavaScript's objects/Maps precisely because of that structural equality behavior—no more head-scratching over reference mismatches. Let's walk through exactly how to declare and use a string-keyed, integer-valued Map, plus highlight that key advantage.

1. Declare the scores Map Type

Reason's Map is functor-based, meaning you first create a specialized Map module tailored to your key type (using a module that implements the Map.OrderedType interface). For string keys, we can use the built-in String module (it already has the required comparison logic).

// Create a Map module specialized for string keys
module StringMap = Map.Make(String);

// Declare your scores type: string keys, integer values
type scores = StringMap.t(int);

This gives you a type-safe scores type that only accepts string keys and integer values.

2. Build Map Instances

Empty Map

To create an empty scores instance:

let empty_scores: scores = StringMap.empty;

Populated Map

You have two common ways to build a filled Map:

Chained add calls (with pipe operator)

Use the pipe operator to cleanly chain additions to the empty Map:

let student_scores: scores =
  StringMap.empty
  |> StringMap.add("Alice", 95)
  |> StringMap.add("Bob", 88)
  |> StringMap.add("Charlie", 72);

Bulk initialization with of_list

If you already have a list of key-value pairs, use of_list for a more concise setup:

let score_pairs = [("Alice", 95), ("Bob", 88), ("Charlie", 72)];
let student_scores: scores = StringMap.of_list(score_pairs);

3. The Structural Equality Advantage (vs JavaScript)

This is where Reason's Map shines compared to JavaScript. In JS, objects and Maps use reference equality: even if two structures have identical content, they're considered unequal if they're different references. Reason's Map uses structural equality—so two Maps with the exact same key-value pairs are always equal, regardless of how they were created.

Example Comparison

Reason ML

let scores_a = StringMap.add("Alice", 95, StringMap.empty);
let scores_b = StringMap.add("Alice", 95, StringMap.empty);

Js.log(scores_a === scores_b); // ✅ Output: true (same structure = equal)

JavaScript

const scoresA = new Map([["Alice", 95]]);
const scoresB = new Map([["Alice", 95]]);

console.log(scoresA === scoresB); // ❌ Output: false (different references = not equal)
// To check structural equality in JS, you'd need to write custom logic to compare every entry

内容的提问来源于stack exchange,提问作者sdgfsdh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:40:44