gpt4 book ai didi

javascript - 注释中带有 JSDoc 和 Immutable.js 数据结构

转载 作者:搜寻专家 更新时间:2023-11-01 04:23:09 26 4
gpt4 key购买 nike

我正在返回 Immutable.js List来自函数的数据结构。

PHPStorm 自动附加以下内容 @returns {*|List<T>|List<any>} .

Eslint 给我警告“T”类型的未解析变量。在哪里可以找到 Immutable.js 注释的文档?

如何在 Eslint 中传递的列表的 @returns 注释形状中进行描述?

/**
* @param n
* @returns {*|List<T>|List<any>}
*/
const getList = (n) => {
let list = Immutable.List()

for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
list = list.push(Immutable.List.of(i, j))
}
}

return list
}

最佳答案

虽然我不熟悉 Immutable.js,但问题是 T是必须在文档中定义的模板。看,你的函数真正返回的是一个数字列表列表。所以T解析为 List<Number>并且您的固定文档将类似于:

/**
* @param {Number} n
* @return {List<List<Number>>}
*/

你可以去掉 *List<any>作为可能的返回类型,因为您的函数显然总是返回数字列表的列表。

就是这样。


关于算法复杂度

附带说明,请记住您编写的函数的处理时间随参数 n 呈二次方增长。 .如果您发现自己经常调用传递相同值的函数,请考虑记住它的返回值:

const memoizedLists = new Map();

/**
* @param {Number} n
* @return {List<List<Number>>}
*/
function getList(n) {
// try to find a previous run for this same value
let result = memoizedLists.get(n);

if (!result) {
// compute it otherwise
result = Immutable.List();

for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
result.push(Immutable.List.of(i, j));
}
}

// memoize it for a future invocation
memoizedLists.set(n, result);
}

return result;
}

此外,不仅时间而且内存使用量也在呈二次方增长。根据您使用它的方式,您可能希望将您的函数变成一个生成器函数,这将“神奇地”使其使用常量空间,即,无论有多大 n获取,您的函数将继续使用相同数量的内存。这是你的函数变成了生成器函数:

/**
* @generator
* @param {Number} n
* @yields {List<Number>}
*/
function *getList(n) {
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
yield Immutable.List.of(i, j);
}
}
}

为了能够将其用作生成器,您需要按需调用它。例如,如果您将这些数字对打印到某些输出:

for (const pair of getList(4)) {
console.info(`...and here comes another pair: [${pair}]`);
}

关于javascript - 注释中带有 JSDoc 和 Immutable.js 数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com