Dart 在函数()中使用静态变量
我知道我们是否可以像在JavaScript中那样在函数中声明静态变量 当我回调函数时,我的变量保留了她最后的做作Dart 在函数()中使用静态变量,dart,Dart,我知道我们是否可以像在JavaScript中那样在函数中声明静态变量 当我回调函数时,我的变量保留了她最后的做作 或者我只能使用全局变量(它不性感…?在函数中不能使用静态变量 Dart中的全局变量没有代码味道,因为它们只是库全局变量。 JavaScript中的全局变量很难看,因为它们可能与第三方库中的全局变量冲突。 这在Dart中不会发生 因为您可以在Dart中使库尽可能小(例如,只有一个变量),并且当您像这样导入库时,您有类似于库的名称空间的东西 导入'my_globals.dart'作为总账
或者我只能使用全局变量(它不性感…?在函数中不能使用静态变量 Dart中的全局变量没有代码味道,因为它们只是库全局变量。
JavaScript中的全局变量很难看,因为它们可能与第三方库中的全局变量冲突。
这在Dart中不会发生 因为您可以在Dart中使库尽可能小(例如,只有一个变量),并且当您像这样导入库时,您有类似于库的名称空间的东西
导入'my_globals.dart'作为总账;
然后像这样使用它
打印(gl.myGlobalValue);
这不是代码气味
您还可以创建一个类来模拟命名空间,如
类MyGlobals{
静态myVal=12345;
}
但是Dart中更倾向于使用库全局变量,而不是只包含静态变量或函数的类。您只能使用全局变量 您还可以通过带有“损坏”名称的私有变量来解决这个问题
void main(){
myFunction();
myFunction();
myFunction();
}
int _myFunction$count=0;
void myFunction(){
打印(_myFunction$count++);
}
这并没有太大帮助,但是您可以考虑变量名为“yMyStudio$Cube”,它是函数“MyFalm”中的本地静态变量“计数”。 与此伪代码相同
void myFunction(){
静态整数计数=0;
打印(计数+);
}
您可以使用函数对象来维护状态:
库测试;
类测试实现函数{
var状态=0;
静态var静态_状态=10;
调用(){
打印('Status:$Status');
打印(“静态状态:$Static_status”);
状态++;
静态_状态++;
}
}
void main(){
var fun=新测试();
乐趣();
乐趣();
乐趣();
var fun2=新测试();
fun2();
fun2();
fun2();
}
输出:
状态:0
静态状态:10
现状:1
静态状态:11
现状:2
静态状态:12
状态:0
静态状态:13
现状:1
静态状态:14
现状:2
静态状态:15
您可以使用闭包,在本例中,我创建了一个计数器,如下所示:
void mian(){
var my_counter = counter(5);
for (var i = 0; i < 10; i++) {
print(my_counter());
}
}
Function counter(int n) {
var number = 0;
var func = () {
if (number < n) {
number++;
return number;
} else {
number = 1;
return number;
}
};
return func;
}
void-mian(){
var my_counter=计数器(5);
对于(变量i=0;i<10;i++){
打印(我的计数器());
}
}
功能计数器(int n){
var数=0;
var func=(){
如果(数字
或者也可以是发电机:
Iterable<int> count(int n) sync* {
var number = 0;
while (number < n) {
yield number++;
}
}
Iterable计数(整数n)同步*{
var数=0;
while(数量
只能使用全局变量。这是Dart语言的一个限制。为什么会发生这种情况,你必须问Dart语言的设计者。这肯定是聪明的,但我不知道我会推荐在实践中使用它而不是库变量,或者只是把函数放在类上,然后在类中使用静态变量。