Dart中的枚举有比较运算符吗?

jfgube3f  于 2023-03-16  发布在  其他
关注(0)|答案(3)|浏览(169)

我有Kotlin的背景,我习惯了枚举实现Comparable,这允许我做如下的事情:
给定枚举

enum class Fruit{
  APPLE,
  BANANA,
  ORANGE,
}

我可以使用操作符<><=>=来比较此枚举的任何出现,如下所示:

APPLE < BANANA -> true
ORANGE < BANANA -> false

我想知道dart默认情况下是否有相同的操作符,或者我是否必须为任何我可能需要的枚举定义自定义操作符。

66bbxpm5

66bbxpm51#

很容易检查Enum documentation或自己尝试一下,看看Enum类不提供operator <operator >等。
Dart 2.15确实添加了一个Enum.compareByIndex方法,您还可以向Enum添加扩展方法:

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;
  }
}
pkbketx9

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
xqnpmsa8

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

相关问题