【发布时间】:2019-03-01 06:19:36
【问题描述】:
我想要一些单例类并实现。我参考了这篇文章https://stackoverflow.com/a/12649574/6323093。
我的实现是这样的。所有源文件都是相同的lib 目录。
Singleton.dart
class Singleton {
static final instance = Singleton();
int value = 0;
}
user1.dart
import 'singleton.dart'; // non-package expression
int getValue1() {
return Singleton.instance.value;
}
setValue1(int val) {
Singleton.instance.value = val;
}
user2.dart
import 'package:singleton/singleton.dart'; // package expression
int getValue2() {
return Singleton.instance.value;
}
setValue2(int val) {
Singleton.instance.value = val;
}
main.dart
import 'user1.dart';
import 'user2.dart';
// below is test code
setValue1(99)
setValue2(999)
// My expected behavior is both '999'... why??
print(getValue1()) // -> 99
print(getValue2()) // -> 999
在上面的代码中,我预计getValue1() 和getValue2() 都是999,但实际结果是99 和999。
当我将user2.dart 的导入语句更改为import 'singleton.dart 或user1.dart 的导入语句更改为'package:singleton/singleton.dart'; 时,结果为999(如我所料)。
这是正确的 Dart 行为吗?还是这种行为是错误?
我很困惑,因为我认为导入表达式(包和非包)的含义完全相同。
【问题讨论】:
标签: dart