首页 > 解决方案 > 为什么 Dart 的 DateTime 对象不使用小于和大于运算符覆盖方法?

问题描述

所以我注意到 Dart 与其他语言相比的独特能力之一是您可以覆盖“原始”比较 ( <, >, <=, >=, ==) 以实现自己的方法。

现在我还在查看 DateTime 类文档以了解它是什么以及如何使用它,我注意到他们选择了命名方法DateTime.isBefore(DateTime other)DateTime.isAfter(DateTime other). 在人类/伪代码中,这些将转换为dateTime < otherand dateTime > other,自然我想为什么不直接在 Dart 中实现呢?

我知道这可以通过使用扩展来完成,就像在这个 DartPad中一样,果然它完全按预期工作,据我所知,没有办法知道正在使用扩展......

但是为什么在开发DateTime对象时没有考虑覆盖操作符呢?或者如果考虑过,为什么不包括在内?

标签: datetimedartmeta

解决方案


有几个原因,但主要是因为排序==.

如果两个DateTime对象具有相同的时间时区,则它们是相等的,但是它们完全基于时间被考虑在彼此之前/之后,正如针对时区所做的修改一样。

a <= b与 ( a < b || a == b)不同的设计被认为是一个糟糕的设计,<因此<=被完全放弃。


推荐阅读