if (!azureutil.isBrowser() ||
!browserFile ||
!browserFile.constructor ||
(!azureutil.isIE() && !browserFile.constructor.name) ||
(!azureutil.isIE() && browserFile.constructor.name !== 'File' && browserFile.constructor.name !== 'Blob') ||
!azureutil.objectIsInt(browserFile.size)) {
return fail(new ArgumentError('type', 'Invalid HTML File object.'));
} else {
callback();
return true;
}
为什么这段代码运行时不会出现紧急情况?我认为这是索引超出内容大小的条件。此代码示例的输出未显示任何内容。
答案 0 :(得分:11)
Rust中的范围不包含上限(除非您使用..=
范围构造函数)。这意味着2..2
之类的范围为零长度:“从2开始,将每个元素增加到但不包括2”。当长度为5
时,5..5
和5..
是等效的。
尽管从最后一个元素开始的范围似乎没有多大意义,但以这种方式工作很方便。例如,如果您正在缩小范围:
for i in 0 .. s.len() + 1 {
println!("slice = {:?}", &s[i ..]);
}
输出:
slice = "hello"
slice = "ello"
slice = "llo"
slice = "lo"
slice = "o"
slice = ""
如果不得不分别处理最后一个空片,这会很烦人。
但是,如果超出数据长度 ,则会引起恐慌。没有任何理由在字符串长度为5时故意写s[6..6]
。