如何仅打印枚举的值?
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;
没有为变量指定类型,也没有可以从中推断其类型的初始值设定项。因此,它被隐式声明为 dynamic
,enum
上的扩展不会应用于它。
您可以通过指定显式类型来修复它:
Move playerMove;
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;
没有为变量指定类型,也没有可以从中推断其类型的初始值设定项。因此,它被隐式声明为 dynamic
,enum
上的扩展不会应用于它。
您可以通过指定显式类型来修复它:
Move playerMove;