以下代码的输出应该是什么?它是否正确?

时间:2013-11-28 04:22:12

标签: dart dart-mirrors

如果我没错,这段代码应该打印出来:

 "dart.core.dynamic"

但是打印了以下内容:

 "dynamic"

我的代码:

    import 'dart:mirrors';

    main() {
      var mirror = reflectType(dynamic);
      var symbol = mirror.qualifiedName;
      print(symbol); // -> "dynamic"
    }

2 个答案:

答案 0 :(得分:1)

我认为“动态”是一个非常好的结果。

通常的限定名称在类型名称前面加上声明库的名称。 您期望它以“dart.core”为前缀,这是“dart:core”库的名称,但“动态”未在该库(https://api.dartlang.org/docs/channels/stable/latest/dart_core.html)中声明,因此这将是错误的前缀使用。

“动态”类型是未在任何库中声明的合成类型 - 没有“class”或“typedef”声明可以声明类型表现为“动态”的类型。它仅由规范指定,并在编译器和运行时系统内部实现。

在这种情况下,拥有没有前缀的限定名称非常有意义。这与“无效”相同。

答案 1 :(得分:0)

这是答案How do I get the qualified name from a Type instance, in Dart?

你忘记了

 Symbol symbol = mirror.qualifiedName;
 String qualifiedName = MirrorSystem.getName(symbol);