我会知道我们是否可以在函数中声明一个静态变量,就像我们在JavaScript中所做的那样。在函数中使用静态变量()
当我回调我的功能,我的变量保持她最后的作风。
或者我可以只使用全局变量(这不是性感......)?
我会知道我们是否可以在函数中声明一个静态变量,就像我们在JavaScript中所做的那样。在函数中使用静态变量()
当我回调我的功能,我的变量保持她最后的作风。
或者我可以只使用全局变量(这不是性感......)?
您不能在函数中使用静态。
Dart中的全局变量没有代码异味,因为它们只是库全局。
JavaScript中的全局变量很丑,因为它们可能与第三方库中的全局变量冲突。
这在飞镖中不会发生。
正如你可以在达特库小到你想要的(例如只有一个变量),你有类似的命名空间的库的东西,当你导入它像
import 'my_globals.dart' as gl;
和然后像
print(gl.myGlobalValue);
这是没有代码味道。
你也可以创建一个类来模拟一个命名空间像
class MyGlobals {
static myVal = 12345;
}
但库全局变量是首选,而不是只包含静态变量或函数的类的飞镖。
您只能使用全局变量。
您也可以通过使用“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++);
}
您可以使用函数对象来维护状态:
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
绝对是聪明的点,但我不知道我会推荐它在实践中通过库变量或只是将函数放在类上,并在类中使用静态变量。 –
只能使用全局变量。这是Dart语言的限制。为什么发生这种情况,你必须询问Dart语言的设计者。 – mezoni