我在JavaScript中创建了一个元组类型,实现了Iterable
协议。现在将其转换为Map
应该很容易:
const Tuple = (...args) => {
const Tuple = f => f(...args);
Tuple[Symbol.iterator] = () => args[Symbol.iterator]();
return Tuple;
};
new Map([Tuple(1, "a"), Tuple(2, "b")]); // Map {undefined => undefined}
相反,我必须手动进行转换:
const Tuple = (...args) => {
const Tuple = f => f(...args);
Tuple[Symbol.iterator] = () => args[Symbol.iterator]();
return Tuple;
};
const toArray = tx => tx((...args) => args);
const Map_ = (...pairs) => {
return new Map(pairs.map(pair => toArray(pair)));
};
const map = Map_(Tuple(1, "a"), Tuple(2, "b"));
console.log(map.get(1), map.get(2)); // "a" "b"
看起来Map
只接受外层组合类型的Iterable
,而不是内部键值对的Iterable
。我错过了什么吗?是否有其他方法可以实现转换?
Array
来存储各种类型的相关数据(例如[a,b]
)。Array
是一个集合,因此应该是类型为[a]
。 - user6445533