0

Dart オブジェクトのアドレスを出力するトリックはありますか? Dart は列挙型をサポートしていますか?で説明されているように、標準の列挙型クラスがあるという問題があります。.

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

値を比較するoperator==(Access other)を指定すると、期待値が返されます。したがって、これはおそらく異なるライブラリからクラスに来ることと関係があると考えました(おそらく関連するものを分離します) 。アクセスAccess.ROのアドレスを出力できれば、それらが異なるかどうかを確認できます。もちろん、それらが異なる場合は、その理由も知る必要があります。

4

2 に答える 2

2

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
}

これはあなたの問題を説明するかもしれません。

于 2013-04-05T14:56:00.487 に答える