1

我可以在 Dart VM 上运行此代码:

@MirrorsUsed(metaTargets: Tag)
import 'dart:mirrors';

class Tag {
  final Symbol name;
  const Tag(this.name);
}
@proxy
@Tag(#[])
class Tagged {
  noSuchMethod(Invocation invocation) {
    InstanceMirror instanceMirror = reflect(this);
    ClassMirror classMirror = instanceMirror.type;
    classMirror.metadata.forEach((em) {
      if (em.reflectee is Tag && em.reflectee.name == invocation.memberName)
         print(invocation.positionalArguments);
    });
  }
}
void main() {
  var tagged = new Tagged();
  tagged[42];
  tagged.foo();
  tagged["Dart"];
}

输出:

[42]
[飞镖]

但是当我尝试用 dart2js 编译它时,它会因为这个错误而失败:

[来自 Dart2JS 的错误]:
bin\dart2jswithbracketanotation.dart:9:7:
预期的标识符,但得到了“[”。
@标签(#[])

那么哪个有错误?:

  1. (Dart VM)因为我可以运行它。
  2. (dart2js) 因为它不能编译为 js。

更新: 我报告了这个错误

4

1 回答 1

1

我认为这是 Dart2JS 中的一个错误,因为在这个位置应该允许一个操作员。

于 2014-06-08T15:53:40.373 回答