0

ミラーを使用しようとしていますが、いくつかの単純なコードにエラーがあります。

import 'dart:mirrors';
// -----------------
class TestUser extends Object{
  String name = 'aaa';
  String status = 'bbb';
  String position = 'ccc';
  int age = 20;
}

var mapVal = new TestUser();
InstanceMirror mirror = reflect(mapVal);

var futureValue = mirror.getField('age');
futureValue.then((imValue) => print("Field: age = ${imValue.reflectee}"));

結果:

Unhandled exception:
Class 'String' has no instance getter '_name@0x1aab143'.

NoSuchMethodError : method not found: '_name@0x1aab143'
Receiver: "age"
Arguments: []
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#1      Symbol.getName (dart:_collection-dev/symbol.dart:64)
#2      _n (dart:mirrors-patch/mirrors_impl.dart:59)
#3      _LocalObjectMirror.getField (dart:mirrors-patch/mirrors_impl.dart:254)
#4      main (file:///C:/Users/Less/IdeaProjects/testDart/console/template.dart:67:36)
#5      _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#6      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)

その意味?何も思いつきません。文字列から '_name@0x1aab143' を取るのはなぜですか? 黒魔術...

4

2 に答える 2

1

Dart のすべてが非同期というわけではありません ;-)

// mirror.getField('age');
InstanceMirror im = mirror.getField(#age); // needs a symbol

// futureValue.then((imVa
print("Field: age = ${im.reflectee}")); // getField doesn't return a future
于 2014-02-21T09:44:10.823 に答える
1
var mapVal = new TestUser();
InstanceMirror mirror = reflect(mapVal);
// getField() expects an instance of Symbol, not String
var futureValue = mirror.getField(new Symbol("age"));
// getField() returns an InstanceMirror, not a Future<InstanceMirror>
print("Field: age = ${futureValue.reflectee}");

SDK を更新したのに、エディタを更新していない可能性はありますか? 現在の SDK を使用する現在のエディターでは、これらすべてが警告として表示されるため、このコードのトラブルシューティングは簡単です。

于 2014-02-21T09:45:33.783 に答える