【发布时间】:2021-10-22 23:52:06
【问题描述】:
为什么 Dart 尝试在全局空间中设置类的静态变量会报错?
例子:
class Name {
static String? firstName;
}
Name.firstName = 'Mike'; // Error
void main() {
Name.firstName = 'Mike'; // Ok
}
这没什么大不了的。我只是遇到了这个,然后找不到解释为什么会这样。它在文档中的什么地方描述了这里的细微差别?
[更新]
引发的实际错误包括:“必须使用关键字 'const'、'final'、'var' 或类型名称声明变量。”
您实际上可以在函数之外执行语句,但它们必须是声明作用域变量的语句。也许这些不是技术上的陈述,而只是变量实例化。
class Name {
static String? staticName;
String? lastName;
}
final me = Name(); // Ok
me.lastName = 'Jones'; // Error
void main() {
Name.staticName = 'Mike'; // Ok
final you = Name(); // Ok
you.lastName = 'Smith'; // Ok
}
没有变量作用域,编译器认为我必须定义一个函数,当没有参数列表或函数体时它会感到困惑。
根据@jamesdlin 的回答,语句仅限于函数定义的变量实例化是有道理的,因此不会对文件的其他导入器产生与执行顺序相关的副作用。
【问题讨论】:
-
你没有在类或函数中使用它。
标签: dart