Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 在函数()中使用静态变量_Dart - Fatal编程技术网

Dart 在函数()中使用静态变量

Dart 在函数()中使用静态变量,dart,Dart,我知道我们是否可以像在JavaScript中那样在函数中声明静态变量 当我回调函数时,我的变量保留了她最后的做作 或者我只能使用全局变量(它不性感…?在函数中不能使用静态变量 Dart中的全局变量没有代码味道,因为它们只是库全局变量。 JavaScript中的全局变量很难看,因为它们可能与第三方库中的全局变量冲突。 这在Dart中不会发生 因为您可以在Dart中使库尽可能小(例如,只有一个变量),并且当您像这样导入库时,您有类似于库的名称空间的东西 导入'my_globals.dart'作为总账

我知道我们是否可以像在JavaScript中那样在函数中声明静态变量

当我回调函数时,我的变量保留了她最后的做作


或者我只能使用全局变量(它不性感…?

在函数中不能使用静态变量

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语言的设计者。这肯定是聪明的,但我不知道我会推荐在实践中使用它而不是库变量,或者只是把函数放在类上,然后在类中使用静态变量。