所以我注意到Dart相对于其他语言的独特能力之一是,您可以覆盖;基元";比较(<, >, <=, >=, ==
(,以便实现您自己的方法。
现在,我还在查看DateTime类文档,以了解它是什么以及如何使用它,我注意到他们选择了命名方法DateTime.isBefore(DateTime other)
和DateTime.isAfter(DateTime other)
。在人类/伪代码中,这些代码将转换为dateTime < other
和dateTime > other
,自然我想为什么不直接在Dart中实现呢?
我知道这可以使用扩展来完成,就像在这个DartPad中一样,毫无疑问,它完全按照预期工作,据我所知,没有办法知道扩展正在被使用。。。
但是为什么在开发DateTime
对象时没有考虑重写运算符呢?或者,如果考虑了它,为什么不包括它
有几个原因,但主要是因为排序与==
不兼容。
如果两个DateTime
对象具有相同的时间和时区,则它们是相等的,但它们完全基于时间在彼此之前/之后被考虑,如针对时区所修改的。
具有与(a < b || a == b
(不同的a <= b
被认为是一种糟糕的设计,因此,<
和<=
被完全丢弃。