如何在Dart中使用Switch Case语句

h43kikqp  于 2023-05-20  发布在  其他
关注(0)|答案(3)|浏览(178)

我想知道 dart 的开关是如何工作的。我有一个非常简单的代码:

methodname(num radians) {
  switch (radians) {
    case 0:
      // do something
      break;
    case PI:
      // do something else
      break;
  }
}

不幸的是,这不起作用。如果像这样离开,错误是:case表达式必须具有相同的类型(我认为类型是num,但不是编辑器)。如果我把0改成0.0,它会说:开关类型表达式double不能覆盖==运算符-我不知道这是什么意思!
那么,如何实现这种切换呢?我可以把它打开if/else可能,但我想知道如何使开关工作,为什么它不工作摆在首位。
我正在运行DartEditor的最新稳定版本。

v9tzhpje

v9tzhpje1#

使用'=='比较双精度值不是很可靠,应该避免(不仅在Dart中,而且在大多数语言中)。
你可以这样做

methodname(num radians) {
  // you can adjust this values according to your accuracy requirements
  const myPI = 3142; 
  int r = (radians * 1000).round();

  switch (r) {
    case 0:
      // do something
      break;
    case myPI: 
      // do something else
      break;
  }
}

此问题包含一些您可能感兴趣的附加信息

更多信息:

5lhxktic

5lhxktic2#

以下是Dart中的开关案例。
问:写一个程序来打印给定数字的乘法表。接受用户的输入并显示其乘法表

import 'dart:io';

void main(List<String> args) {
  print('enter a number from 1 to 7');

  var input = stdin.readLineSync();

  int day = int.parse(input!);

  switch (day) {
    case 1:
      print('Sunday');
      break;

    case 2:
      print('Monday');
      break;

    case 3:
      print('Tuesday');
      break;

    case 4:
      print('Wednesday');
      break;
    case 5:
      print('Thursday');
      break;

    case 6:
      print('Friday');
      break;
    case 7:
      print('Saturday');
      break;
    default:
      print(' invalid entry');
  }
}
fumotvh3

fumotvh33#

我认为Dart 3的switch expression为此提供了更简洁的语法。

bool methodname(num radians) {
  const myPI = 3142;
  int r = (radians * 1000).round();

  return switch (r) {
    myPI => true,
    _ => false,
  };
}

相关问题