反映原始类型(如“double”)会导致意外输出

时间:2013-11-27 14:58:29

标签: dart

以下示例失败:

FAIL: MyClass tests getClassReturnsConstructorForDouble
  Expected: ?:<double>
    Actual: ?:<double>

示例:

test("getClassReturnsConstructorForDouble", () {
    double object = 10.1;
    Type objectClass = reflect(object).type.reflectedType;      
    expect(objectClass, equals(object.runtimeType));
});

是否无法准确反映int / double类型?

2 个答案:

答案 0 :(得分:6)

reflectType为您提供真正的实现类型。 runtimeType可以设计,也可以设计。

对于字符串和其他内置类型,各种数字的数量可以有不同的实现,但它们是公知的。

例如,我们可能对不同大小的整数有不同的实现类型,但是他们都会说他们的runtimeType是int。如果你反思它们,你可以看到差异。

另一个例子可能是String。例如,可能有纯ASCII字符串的专用类,因为它们可以更紧凑地表示。这不会在基础级别公开:runtimeType是String。除非你通过反射来挖掘它,否则你无法检测到它。

答案 1 :(得分:0)

我认为反射正在向您返回正确的类型,但是您的测试失败,因为objectClass和object.runtimeType是两个单独的对象,因此彼此不相等。如果你首先将它们转换为字符串,它们将彼此相等:

expect(objectClass.toString(), equals(object.runtimeType.toString()));