如何仅打印枚举的值?

How to print only the value of an enum?

enum Move {石头剪刀布}

var playerMove = Move.rock;

打印('Player played :${playerMove.name}'); <--- 这行给我一个错误

打印('AI played :${aiMove.name}'); <--- 虽然这条线完美无缺

这是错误代码: 未处理的异常: NoSuchMethodError: Class 'Move' 没有实例 getter 'name'。 接收者:'Move' 的实例 试过呼叫:姓名

import 'dart:io';

import 'dart:math';

enum Move { rock, paper, scissors }
void main() {
  while (true) {
    final rng = Random();
    stdout.write('Rock, paper, scissors (r,p,s): ');
    final input = stdin.readLineSync();
    if (input == 'r' || input == 'p' || input == 's') {
      var playerMove;
      if (input == 'r') {
        playerMove = Move.rock;
      } else if (input == 'p') {
        playerMove = Move.paper;
      } else {
        playerMove = Move.scissors;
      }
      var random = rng.nextInt(3);
      var aiMove = Move.values[random];
      print('Input: $input');
      print('Player played :${playerMove.name}');
      print('AI played     :${aiMove.name}');
      if (playerMove == aiMove) {
        print("It's a draw");
      } else if (playerMove == Move.paper && aiMove == Move.rock ||
          playerMove == Move.rock && aiMove == Move.scissors ||
          playerMove == Move.scissors && aiMove == Move.paper) {
        print('Player win');
      } else {
        print('You lose');
      }
    } else if (input == 'q') {
      break;
    } else {
      print('Invalid input');
    }
  }
}

.name is an extension on enum. Dart extensions are static: they are compile-time syntactic sugar, and they therefore require that the object's type be known at compilation time.

您有代码:

var playerMove;
if (input == 'r') {
  playerMove = Move.rock;
}
...

var playerMove; 没有为变量指定类型,也没有可以从中推断其类型的初始值设定项。因此,它被隐式声明为 dynamicenum 上的扩展不会应用于它。

您可以通过指定显式类型来修复它:

Move playerMove;