您可以在不初始化或添加 Lateinit 的情况下声明局部变量,但对于全局变量则不然,我的问题是为什么?为什么编译器也不给出局部变量的错误?
例如 :
class A{
var abc : String // this is not allowed by compiler
fun myOwnedFun(){
var abcd : String // this is allowed
}
}
Run Code Online (Sandbox Code Playgroud)
我知道一件事是允许的,另一件事是不允许的,但我很好奇为什么。
局部变量的作用域是定义它的函数。编译器可以毫无问题地验证局部变量在首次访问之前是否已在函数内部初始化。
对于公共类字段,作用域是无限的,因此编译器无法确保该字段在访问之前被初始化。为了防止程序因使用未初始化的变量而进入错误状态,编译器会引发错误。
| 归档时间: |
|
| 查看次数: |
3564 次 |
| 最近记录: |