在谷歌闭包中,如果Array
一个特定@type {Array.<type>}
的被初始化,我可以确定谷歌闭包会确认数组内容吗?
这是一个小测试用例。在我看来,an{Array.<string>}
正在偷偷溜过{Array.<number>}
支票,尽管 a{string}
被同一张支票正确阻止了。我对 GC 有点陌生,这是我的错误吗?
我已将此粘贴到Google Closure Service,并且我只显示了两个预期错误之一(2013 年 9 月 12 日)。我已经在我的本地 jar 文件(最新,v20130823)上使用ADVANCED_OPTIMIZATIONS
和warning_level VERBOSE
. 它仍然看起来像{Array.<string>}
偷偷溜过去。
提前感谢您的意见。
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @warning_level VERBOSE
// @language ECMASCRIPT5
// ==/ClosureCompiler==
/**
no warning, as expected:
@type {Array.<number>}
*/
var a = [1,2,3,4];
/**
warning! Type mismatch as expected:
@type {Array.<number>}
*/
var b = 'mismatch'; // {string} does not match {Array.<number>}
/**
no warning, but Type mismatch was expected:
@type {Array.<number>}
*/
var c = ['foo','bar']; // {Array.<string>} should not match {Array.<number>}
// prevent compile-to-zero
alert(a);
alert(b);
alert(c);
注意: 我仔细查看了这个相关的问题,其中 Array.push() 的类型是手动填写的。不过,这个问题涉及初始化。如果我采用他更正的代码并用垃圾数据初始化他的所有数组,如上所述,GC 也无法在他的情况下捕获垃圾。
编辑:添加warning_level VERBOSE
和language ECMASCRIPT5
到测试用例的标题中,只是为了确定。{Array.<string>}
仍然没有被检测到。