PHPStorm自动附加以下内容
@returns {* | List< T> | List< any>}.
Eslint给我警告“T”类型的未解决变量.
我在哪里可以找到Immutable.js注释的文档?
如何描述将在Eslint中传递的List的@returns注释形状?
/**
* @param n
* @returns {*|List502_17@
最佳答案
虽然我不熟悉Immutable.js,但问题是T是必须在文档中定义的模板.看看,你的函数真正返回的是一个数字列表列表.所以T解析为List< Number>你的固定文件将是这样的:
/**
* @param {Number} n
* @return {List502_17@
你可以摆脱*和List< any>作为可能的返回类型,因为您的函数显然总是返回一个数字列表列表.
就是这样.
关于算法的复杂性
另外请注意,您编写了一个函数,其处理时间与参数n呈二次方增加.如果您发现自己经常调用传递相同值的函数,请考虑记住其返回值:
const memoizedLists = new Map();
/**
* @param {Number} n
* @return {ListIoUs 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;
}
@H_502_17@
而且,不仅时间而且内存使用也以二次方式增加.根据你如何使用它,你可能想要将你的函数变成一个生成器函数,这将“神奇地”使它使用恒定的空间,即无论有多大,你的函数将继续使用相同的记忆量.这是你的功能变成了一个生成器功能:
/**
* @generator
* @param {Number} n
* @yields {List502_17@
为了能够将其用作发电机,您需要按需调用它.例如,如果您将这些数字对打印到某个输出:
for (const pair of getList(4)) {
console.info(`...and here comes another pair: [${pair}]`);
}
@H_502_17@