2014-03-30 109 views
4

我会知道我们是否可以在函数中声明一个静态变量,就像我们在JavaScript中所做的那样。在函数中使用静态变量()

当我回调我的功能,我的变量保持她最后的作风。

或者我可以只使用全局变量(这不是性感......)?

+0

只能使用全局变量。这是Dart语言的限制。为什么发生这种情况,你必须询问Dart语言的设计者。 – mezoni

回答

4

您不能在函数中使用静态。

Dart中的全局变量没有代码异味,因为它们只是库全局。
JavaScript中的全局变量很丑,因为它们可能与第三方库中的全局变量冲突。
这在飞镖中不会发生。

正如你可以在达特库小到你想要的(例如只有一个变量),你有类似的命名空间的库的东西,当你导入它像

import 'my_globals.dart' as gl; 

和然后像

print(gl.myGlobalValue); 

这是没有代码味道。

你也可以创建一个类来模拟一个命名空间像

class MyGlobals { 
    static myVal = 12345; 
} 

但库全局变量是首选,而不是只包含静态变量或函数的类的飞镖。

1

您只能使用全局变量。

您也可以通过使用“mangling”名称的私有变量来解决此问题。

void main() { 
    myFunction(); 
    myFunction(); 
    myFunction(); 
} 

int _myFunction$count = 0; 

void myFunction() { 
    print(_myFunction$count++); 
} 

这不会有很大帮助,但你可以考虑用名“_myFunction $伯爵”变量是功能“myFunction的”本地静态变量“计数”。

与此伪代码相同。

void myFunction() { 
    static int count = 0; 
    print(count++); 
} 
3

您可以使用函数对象来维护状态:

library test; 

class Test implements Function { 
    var status = 0; 
    static var static_status = 10; 

    call() { 
    print('Status: $status'); 
    print('Static status: $static_status'); 
    status++; 
    static_status++; 
    } 
} 

void main() { 
    var fun = new Test(); 

    fun(); 
    fun(); 
    fun(); 

    var fun2 = new Test(); 

    fun2(); 
    fun2(); 
    fun2(); 
} 

输出:

Status: 0 
Static status: 10 
Status: 1 
Static status: 11 
Status: 2 
Static status: 12 
Status: 0 
Static status: 13 
Status: 1 
Static status: 14 
Status: 2 
Static status: 15 
+0

绝对是聪明的点,但我不知道我会推荐它在实践中通过库变量或只是将函数放在类上,并在类中使用静态变量。 –