有什么技巧可以打印 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/