我正在尝试编写一个能够执行以下操作的函数:
isConstant(new Obj()) => false
isConstant(const Obj()) => true
有可能吗?
答案 0 :(得分:5)
否。
在运行时,编译时常量的值与刚创建的新对象之间没有区别。差异仅存在于编译时。
您唯一能做的就是检查对象是否与已知的编译时常量相同。
在这种情况下,(x) => identical(const Object(), x);
将检测“const Object()”对象与运行时创建的任何“new Object()”不同。只有在编写函数时知道所有编译时常量时才有效,因此它可能没用。即使使用镜像遍历所有顶级/静态“const”声明也不会找到所有常量(并且它可能非常浪费)。
您试图在需要此功能的地方解决什么问题?