dart - 对象的打印地址

标签 dart

有什么技巧可以打印 Dart 对象的地址吗?
我遇到一个问题,其中有Does Dart support enumerations?中描述的标准枚举类。

class Access {
  static const IA = const Access._(0);
  static const RO = const Access._(1);
  static const RW = const Access._(2);
  final int value;
  const Access._(this.value);
...
}

变量access的类型为Access,值为1,但是access == Access.RO返回false。

var access = _.access;
print('''
access => ($access, ${access.runtimeType}, ${access.value})
static => (${Access.RO}, ${Access.RO.runtimeType}, ${Access.RO.value})
equal ? => ${(access == Access.RO)}
''');

版画

access => (RO, Access, 1)
static => (RO, Access, 1)
equal ? => false

如果我提供一个比较值的运算符==(访问其他),它将返回期望值。因此,我想这可能与来自不同库的类有关(也许是独立的),如果我可以打印access和Access.RO的地址,我可以看看它们是否不同。当然,如果它们不同,那么我也需要知道为什么。

最佳答案

当您处理const时,必须非常小心。如果您使用new Access._(0)而不是const Access._(0),则不会获得相同的对象。这是一个例子:

class Access {
  static const IA = const Access._(0);
  static const RO = const Access._(1);
  static const RW = const Access._(2);
  final int value;
  const Access._(this.value);
}

main(){
  print(Access.IA == const Access._(0));  // prints true
  print(Access.IA == new Access._(0));  // prints false
}

这可以解释您的问题。

关于dart - 对象的打印地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15836628/

相关文章:

flutter - 如何使用 Riverpod_annotation 创建 "non-autodispose"提供程序?

dart - ListView.Builder 之后的底部填充

class - dart中如何限制类实例的创建为一个?

dart - 随Dart 2安装的AngularDart

flutter - 只能为统一边界提供 borderRadius

firebase - Flutter-将图像上传到Firebase存储

dart - 如何在抽象类中声明工厂构造函数?

Flutter - 如何使用模型从 Firebase 实时数据库读取列表

Flutter:在 Android 上获取本地 IP 地址

dart - 如何从事件e获取元素或元素本身