dart / Flutter 扩展中的运算符重载
Operator overloading within an extension in dart / Flutter
我希望能够使用简单的运算符比较 dart 中的两个 DateTime,因此我创建了一个名为 'date_comparison.dart' 的文件,其中包含以下代码:
extension DateComparison on DateTime {
bool operator >(other) => compareTo(other) > 0;
bool operator <(other) => compareTo(other) < 0;
bool operator >=(other) => compareTo(other) >= 0;
bool operator <=(other) => compareTo(other) <= 0;
}
在另一个文件中,我导入了这个文件并使用了比较运算符,VS Code 没有给我任何错误。 (该文件的代码对于 post 来说有点太多,但重点是除此之外一切正常)
但是,当我尝试 运行 应用程序时,出现 运行 时间错误 NoSuchMethodError
说 »Class 'DateTime' 没有实例方法'<='.«
所以我解决了这个问题:
事实证明,只要类型被扩展修改的变量是动态类型,即使为该变量分配了正确的值,扩展也会被忽略。
就我而言,我不小心忘记在我想使用我的运算符扩展的变量上声明 DateTime 类型,因此它是动态的并且扩展没有效果。
我希望能够使用简单的运算符比较 dart 中的两个 DateTime,因此我创建了一个名为 'date_comparison.dart' 的文件,其中包含以下代码:
extension DateComparison on DateTime {
bool operator >(other) => compareTo(other) > 0;
bool operator <(other) => compareTo(other) < 0;
bool operator >=(other) => compareTo(other) >= 0;
bool operator <=(other) => compareTo(other) <= 0;
}
在另一个文件中,我导入了这个文件并使用了比较运算符,VS Code 没有给我任何错误。 (该文件的代码对于 post 来说有点太多,但重点是除此之外一切正常)
但是,当我尝试 运行 应用程序时,出现 运行 时间错误 NoSuchMethodError
说 »Class 'DateTime' 没有实例方法'<='.«
所以我解决了这个问题:
事实证明,只要类型被扩展修改的变量是动态类型,即使为该变量分配了正确的值,扩展也会被忽略。
就我而言,我不小心忘记在我想使用我的运算符扩展的变量上声明 DateTime 类型,因此它是动态的并且扩展没有效果。