微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 注释中的JSDoc和Immutable.js数据结构

我从函数返回Immutable.js List数据结构.

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

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

如何描述将在Eslint中传递的List的@returns注释形状?

/**
 * @param n
 * @returns {*|List
最佳答案
虽然我不熟悉Immutable.js,但问题是T是必须在文档中定义的模板.看看,你的函数真正返回的是一个数字列表列表.所以T解析为List< Number>你的固定文件将是这样的:

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

你可以摆脱*和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;
}

而且,不仅时间而且内存使用也以二次方式增加.根据你如何使用它,你可能想要将你的函数变成一个生成函数,这将“神奇地”使它使用恒定的空间,即无论有多大,你的函数将继续使用相同的记忆量.这是你的功能变成了一个生成功能

/**
 * @generator
 * @param {Number} n
 * @yields {List

为了能够将其用作发电机,您需要按需调用它.例如,如果您将这些数字对打印到某个输出

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐