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 没有给我任何错误。(该文件的代码有点太多,无法在此处发布,但关键是除此之外一切正常)
但是,当我尝试运行该应用程序时,我收到一个运行时错误NoSuchMethodError
,提示 »Class 'DateTime' 没有实例方法 '<='。«
解决方案
所以我解决了这个问题:
事实证明,只要扩展修改其类型的变量是动态类型,即使为该变量分配了正确的值,扩展也会被忽略。
就我而言,我不小心忘记在我想使用运算符扩展的变量上声明 DateTime 类型,因此它是动态的并且扩展没有效果。
推荐阅读
- linux - 在 linux 下读取 UTF8 文件完全一头雾水
- r - 在数据框列表中使用reduce函数和相交(来自dplyr)来创建另一个数据框
- jquery - 检查文本区域内的变量文本
- ngx-datatable - @swimlane/ngx-datatable 虚拟滚动仅适用于缓存行
- c++ - Thread sleep does not continue execution after timeout
- c# - Json.net serializer is handling `PreserveReferencesHandling` and `ReferenceLoopHandling` wrong
- spring-mvc - docx 文件的 MediaType
- shell - 启动程序的新实例,然后终止旧实例
- html - 移动响应式引导媒体查询
- json - 能不能做个json数据的reactjs组件,在项目中通过import来获取数据