dart - 使用 num 的 int 和 double 上的抽象被新的 Dart 版本破坏
问题描述
以下代码用于在 Dart 2.6 中工作(非常简化的示例!):
T plus<T extends num>(T a, T b) => a + b;
现在它失败了:A value of type 'num' can't be returned from method 'plus' because it has a return type of 'T'.
有没有办法像示例中的意图那样抽象double
?int
解决方案
我假设您将--no-implicit-casts
标志传递给分析器以获取此错误。该代码在当前的 Dart 语言中是正确的,但它包含一个隐式转换,因此如果您选择禁用它们,则该代码将不会被接受。
代码不起作用的原因是 is 的静态类型a + b
(num
两者都具有T
仅知道可以扩展的类型num
,因此它们被视为num
,并num.operator+
返回num
),并且返回类型是T
which may extend num
。
因此,如果您允许,代码会从num
to进行隐式转换。T
要使代码即使在没有隐式转换的情况下也能编译,您必须将其转换为显式转换:
T plus<T extends num>(T a, T b) => (a + b) as T;
推荐阅读
- swift - 将数据传回 UIPickerView
- java - 如何在 JEditorPane 中为 html 设置超时
- go - 如何在不转义的情况下从 url 获取参数(golang)
- mysql - 收到错误 #1452 - 无法添加或更新子行”
- c# - 在配置文件中的“命名空间”中命名,可以吗?
- swift - Facebook 登录会冻结应用程序,并且不会在 iOS 13 上打开 Facebook 权限视图
- angular - 角度 ng 更新不起作用 - 保存代理的位置超时?
- python-3.x - 为什么 int 数据类型的大小比 python 中的 float 大?
- r - 选择以()结尾并包含主列 R 的列
- javascript - 将字符串添加到 textarea 元素中的新行