gpt4 book ai didi

javascript - 可变函数的闭包注释

转载 作者:行者123 更新时间:2023-11-30 12:32:51 25 4
gpt4 key购买 nike

我正在编写要由 Google Closure Compiler 在高级编译模式下编译的代码。在我的代码中的某些地方,我有可变参数函数,我通常会用一个空参数列表来编写这些函数。我会通过检查正文中的特殊变量 arguments 来访问传递的参数。

但是我如何使用 annotations 向 Closure 编译器解释这一点? ?如果我不做任何参数注释,它会提示该函数需要零参数。如果我写了一个注释 @param {...*} (意味着任意数量的任意类型的参数),那么它会提示,因为 @param 注释必须包括参数的名称。如果我写 @param {...*} arguments 然后它会提示命名参数没有出现在函数实现的参数列表中。

我发现让 Google 满意的唯一方法是在参数列表中也包含一个虚拟名称,即使从未使用过。这反过来可能会使读者和一些 linters 感到困惑。所以我更喜欢一些替代方案,如果存在的话。

/** WARNING - Function f1: called with 3 argument(s).
* Function requires at least 0 argument(s) and no more than 0 argument(s).
* @return {number} */
function f1() { return arguments.length; }

/** WARNING - Bad type annotation. expecting a variable name in a @param tag
* @param {...*}
* @return {number} */
function f2() { return arguments.length; }

/** WARNING - parameter arguments does not appear in f3's parameter list
* @param {...*} arguments
* @return {number} */
function f3() { return arguments.length; }

/** WARNING - Function f4: called with 3 argument(s).
* Function requires at least 0 argument(s) and no more than 0 argument(s).
* @return {number} */
function f4(/* ... */) { return arguments.length; }

/** This works but seems slightly confusing to me.
* @param {...*} var_args
* @return {number} */
function f5(var_args) { return arguments.length; }

window["run"] = function() {
return f1(1,2,3) + f2(1,2,3) + f3(1,2,3) + f4(1,2,3) + f5(1,2,3);
};

编译使用

java -jar compiler.jar --compilation_level ADVANCED --warning_level VERBOSE foo.js

最佳答案

“f5”是预期的模式。

/** 
* @param {...*} var_args
* @return {number}
*/
function f5(var_args) { return arguments.length; }

另一种方法是:

/** @type {function(...*):number} */
function f5() { return arguments.length; }

关于javascript - 可变函数的闭包注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050784/

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