当前位置: 首页 > 知识库问答 >
问题:

如何使用Dart构建enum?[副本]

丁弘新
2023-03-14

Dart语言没有枚举(还没有??).至少在语言特性出现之前,构造枚举的正确或惯用方法是什么?

共有3个答案

齐文栋
2023-03-14

我在Dart Web Toolkit中使用了稍微简单一点的Enum类版本:

/**
 * Emulation of Java Enum class.
 *
 * Example:
 *
 * class Meter<int> extends Enum<int> {
 *
 *  const Meter(int val) : super (val);
 *
 *  static const Meter HIGH = const Meter(100);
 *  static const Meter MIDDLE = const Meter(50);
 *  static const Meter LOW = const Meter(10);
 * }
 *
 * and usage:
 *
 * assert (Meter.HIGH, 100);
 * assert (Meter.HIGH is Meter);
 */
abstract class Enum<T> {

  final T _value;

  const Enum(this._value);

  T get value => _value;
}
澹台权
2023-03-14

使用r41815 Dart获得本机Enum支持,请参见http://dartbug.com/21416,可以像

enum Status {
  none,
  running,
  stopped,
  paused
}

void main() {
  print(Status.values);
  Status.values.forEach((v) => print('value: $v, index: ${v.index}'));
  print('running: ${Status.running}, ${Status.running.index}');
  print('running index: ${Status.values[1]}');
}

[Status.noneStatus.runningStatus.stoppedStatus.paused]
value:Status.none, index: 0
value:Status.running, index: 1
value:Status.stopped, index: 2
value:Status.paused, index: 3
run:Status.running,1
run index:Status.running

一个限制是不可能为枚举项设置自定义值,它们是自动编号的。

更多细节请见https://www.dartlang.org/docs/spec/EnumsTC52draft.pdf草案

杨星纬
2023-03-14

Dart 现在支持枚举。

这个答案的其余部分是针对Dart的

这是真的,Dart语言没有(还没有?)拥有枚举。这是一个悬而未决的问题。

同时,这里有一个惯用的Dart片段来创建您自己的枚举。

class Enum {
  final _value;
  const Enum._internal(this._value);
  toString() => 'Enum.$_value';

  static const FOO = const Enum._internal('FOO');
  static const BAR = const Enum._internal('BAR');
  static const BAZ = const Enum._internal('BAZ');
}

使用const构造函数意味着可以在开关中使用该枚举。这里有一个例子:

class Fruits {
  final _value;
  const Fruits._internal(this._value);
  toString() => 'Enum.$_value';

  static const APPLE = const Fruits._internal('APPLE');
  static const PEAR = const Fruits._internal('PEAR');
  static const BANANA = const Fruits._internal('BANANA');
}

void main() {
  var yummy = Fruits.BANANA;

  switch (yummy) {
    case Fruits.APPLE:
      print('an apple a day');
      break;
    case Fruits.PEAR:
      print('genus Pyrus in the family Rosaceae');
      break;
    case Fruits.BANANA:
      print('open from the bottom, it is easier');
      break;
  }
}
 类似资料:
  • 我有一个ANTLR3语法,它构建了一个抽象语法树。我正在考虑升级到ANTLR4。但是,ANTLR4似乎只构建解析树,而不构建抽象语法树。例如,选项不再被识别。此外,在“最终的ANTLR4参考文献”的文本中既没有“AST”也没有“抽象语法”。

  • 单例模式确保只创建一个类的实例。我如何在飞镖中建立这个?

  • 我正在考虑在我的一个项目中使用dart-protobuf来代替JSON。问题是这个库没有提供任何如何使用它的例子,测试也没有真正的帮助。 我对解析文件的工作方式也有点困惑。 所以我想找一个简单的例子来说明如何在dart中使用这个库。

  • 问题内容: 如何构建接收另一个点(x,y)并复制其值的复制构造函数? 我决定签名:,但我不知道该写些什么… Point类看起来像: 我试过了: 但我几乎可以肯定我会做得更好。 n 问题答案: 不,您的尝试 绝对没问题…(我已经更正了参数类型。) 我很想进行make 和final的操作,并且使该类final的操作,但这是因为我喜欢不可变的类型。其他人肯定有不同意见:) 在继承层次结构上进行克隆比较棘

  • 我有服务器套接字,当我用java访问它时,设置socket.setsolinger(true,0);is工作得很好。我试图用dart实现java客户机代码,但我一直得到一个错误。此外,获取错误也需要时间。飞镖应该是快的! 在java中,我将套接字打开为socketOut=new DataOutPutStream(socket.getOutputStream());和socketIn=new Dat

  • 我必须在docker环境中构建yolact(我使用sagemaker笔记本)。就像这样 而我想经营这个 但我有一个错误: 但是环境支持CUDA。有人知道问题出在哪里吗? 谢谢你。