检查对象是否是编译时常量

时间:2014-09-18 18:43:07

标签: dart

我正在尝试编写一个能够执行以下操作的函数:

isConstant(new Obj()) => false
isConstant(const Obj()) => true

有可能吗?

1 个答案:

答案 0 :(得分:5)

否。

在运行时,编译时常量的值与刚创建的新对象之间没有区别。差异仅存在于编译时。

您唯一能做的就是检查对象是否与已知的编译时常量相同。 在这种情况下,(x) => identical(const Object(), x);将检测“const Object()”对象与运行时创建的任何“new Object()”不同。只有在编写函数时知道所有编译时常量时才有效,因此它可能没用。即使使用镜像遍历所有顶级/静态“const”声明也不会找到所有常量(并且它可能非常浪费)。

您试图在需要此功能的地方解决什么问题?