我在试着了解dart 中的switch 是如何工作的.我有非常简单的代码:

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

不幸的是,这不起作用.如果这样,错误是:case表达式必须具有相同的类型(我认为类型是num,但不是编辑器). 如果我将0更改为0.0,它会说:switch 类型表达式DOUBLE不能覆盖==运算符-我不知道这是什么意思!

那么,如何处理这个switch case 呢?我可以将其设置为IF/ELSE,但我想知道如何使switch 工作,以及为什么它一开始就不工作.

我正在运行最新稳定版本的DartEditor.

拜托有人能帮忙吗?

推荐答案

使用‘==’比较双精度值不是很可靠,应该避免(不仅在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;
  }
}

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

更多信息:

Dart相关问答推荐

Dart 可空记录与模式匹配:(String, int)?类型的匹配值无法分配给所需类型(Object?, Object?)

如何在 Flutter 的 firebase_database 中执行事务?

如何在 Dart 中实现继承?

从 PopupMenuItem 中删除填充(overflow menu)

Flutter:Firebase FieldValue.serverTimestamp() 到 DateTime 对象

在Flutter中解析 JSON 到 Map

替换 Flutter 中的片段等小部件

在 Dart 中,是否可以有一个 const 闭包映射?

摆动中的可滚动导轨

如何在 Dart 语言中将 Future 转换为 List

在向下滚动时隐藏底部导航栏,反之亦然

Flutter url_launcher 未在发布模式下启动 url

如何判断两张 map 的省道是否相等

断言失败时如何在 Dart 中打印消息?

一个集合如何确定两个对象在dart中相等?

如何在 Dart 中创建 StreamTransformer?

Dart: 必须取消 Stream 订阅并关闭 StreamSinks 吗?

将多张map合并/合并为一张map

如何通过 Dart 中的值获取 Map 键?

List firstWhere Bad state: No element