1
我在高級編譯模式下編寫了由Google Closure編譯器編譯的代碼。在我的代碼中的一些地方,我有通常用空參數列表寫入的可變參數函數。我會通過檢查體內的特殊變量arguments
來訪問傳遞的參數。可變參數函數的關閉註釋
但是我怎樣才能解釋這個Closure編譯器使用annotations?如果我不做任何參數註釋,它會抱怨該函數需要零參數。如果我編寫註釋@param {...*}
(表示任意類型的任意數量的參數),則它會抱怨,因爲@param
註釋必須包含參數的名稱。如果我寫@param {...*} arguments
那麼它會抱怨命名參數不在函數實現中的參數列表中。
我發現讓Google開心的唯一方法是在參數列表中添加一個虛擬名稱,即使這個名稱從未被使用過。這反過來可能會混淆讀者,也可能使一些絨毛。所以如果存在的話,我寧願選擇一些。
/** 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
這只是它是如何。如果你不喜歡這個要求,你應該與Google Closure開發者交談。 – 2014-11-20 22:37:20