我有Kotlin的背景,我习惯了枚举实现Comparable,这允许我做如下的事情:给定枚举
Comparable
enum class Fruit{ APPLE, BANANA, ORANGE, }
我可以使用操作符<、>、<=或>=来比较此枚举的任何出现,如下所示:
<
>
<=
>=
APPLE < BANANA -> true ORANGE < BANANA -> false
我想知道dart默认情况下是否有相同的操作符,或者我是否必须为任何我可能需要的枚举定义自定义操作符。
66bbxpm51#
很容易检查Enum documentation或自己尝试一下,看看Enum类不提供operator <、operator >等。Dart 2.15确实添加了一个Enum.compareByIndex方法,您还可以向Enum添加扩展方法:
Enum
operator <
operator >
Enum.compareByIndex
extension EnumComparisonOperators<T extends Enum> on T { bool operator <(T other) { return index < other.index; } bool operator <=(T other) { return index <= other.index; } bool operator >(T other) { return index > other.index; } bool operator >=(T other) { return index >= other.index; } }
pkbketx92#
正如在其他注解中所解释的,您也可以创建自己的操作符并使用它。尝试下面的代码,看看如何在不创建运算符的情况下处理它。
enum Fruit{ APPLE, BANANA, ORANGE, } void main() { print(Fruit.APPLE.index == 0); print(Fruit.BANANA.index == 1); print(Fruit.ORANGE.index == 2); if( Fruit.APPLE.index < Fruit.BANANA.index ){ // Write your code here print("Example"); } }
结果
true true true Example
xqnpmsa83#
从2.15开始,静态:
compareByIndex<T extends Enum>(T value1, T value2) → int Compares two enum values by their index. [...] @Since("2.15") compareByName<T extends Enum>(T value1, T value2) → int Compares enum values by name. [...] @Since("2.15")
https://api.dart.dev/stable/2.16.1/dart-core/Enum-class.html
3条答案
按热度按时间66bbxpm51#
很容易检查
Enum
documentation或自己尝试一下,看看Enum
类不提供operator <
、operator >
等。Dart 2.15确实添加了一个
Enum.compareByIndex
方法,您还可以向Enum
添加扩展方法:pkbketx92#
正如在其他注解中所解释的,您也可以创建自己的操作符并使用它。
尝试下面的代码,看看如何在不创建运算符的情况下处理它。
结果
xqnpmsa83#
从2.15开始,静态:
https://api.dart.dev/stable/2.16.1/dart-core/Enum-class.html