datetime - 为什么 Dart 的 DateTime 对象不使用小于和大于运算符覆盖方法?
问题描述
所以我注意到 Dart 与其他语言相比的独特能力之一是您可以覆盖“原始”比较 ( <, >, <=, >=, ==
) 以实现自己的方法。
现在我还在查看 DateTime 类文档以了解它是什么以及如何使用它,我注意到他们选择了命名方法DateTime.isBefore(DateTime other)
和DateTime.isAfter(DateTime other)
. 在人类/伪代码中,这些将转换为dateTime < other
and dateTime > other
,自然我想为什么不直接在 Dart 中实现呢?
我知道这可以通过使用扩展来完成,就像在这个 DartPad中一样,果然它完全按预期工作,据我所知,没有办法知道正在使用扩展......
但是为什么在开发DateTime
对象时没有考虑覆盖操作符呢?或者如果考虑过,为什么不包括在内?
解决方案
有几个原因,但主要是因为排序与==
.
如果两个DateTime
对象具有相同的时间和时区,则它们是相等的,但是它们完全基于时间被考虑在彼此之前/之后,正如针对时区所做的修改一样。
a <= b
与 ( a < b || a == b
)不同的设计被认为是一个糟糕的设计,<
因此<=
被完全放弃。
推荐阅读
- linux - openwrt wifi udp 多播丢包和限速
- phpstorm - PhpStorm 中的多条垂直线以获得最大线长
- javascript - 如何在某个类jquery之外仅获取子元素
- c# - 最佳实践:来自异步处理的同步响应
- javascript - 如何首次将值存储到浏览器 localStorage?
- android - Android Studio-如何在应用程序关闭后以编程方式删除最近的应用程序列表
- json - 如何将 json 转换为具有单个标头和多个值的 csv?
- scala - 在 scala 中仅使用递归的单行循环
- javascript - 如何从请求中获取用户?
- woe-id - 是否可以像现在雅虎一样使用城市名称来获得WOEID!API 已关闭