【问题标题】:+ isn't defined for the type 'Object+ 没有为“对象”类型定义
【发布时间】:2022-01-25 03:11:59
【问题描述】:
我不断收到此错误 =>“未为类型 'Object' 定义运算符 '+'。(查看文档)。尝试定义运算符 '+'。”
我该如何定义它?
import 'dart:math';
bool isArmstrongNumber(int number) {
var numberString = number.toString();
return number ==
numberString.split("").fold(0,
(prev, curr) => prev! + pow(int.parse(curr), numberString.length));
}
main() {
var result = isArmstrongNumber(153);
print(result);
}
【问题讨论】:
标签:
dart
object
operators
undefined
dart-null-safety
【解决方案1】:
Dart 中的fold 在自动确定它应该返回和处理的类型时可能会遇到一些问题。在这些情况下,我们需要像这样手动输入类型(fold<int>()):
import 'dart:math';
bool isArmstrongNumber(int number) {
final numberString = number.toString();
return number ==
numberString.split("").fold<int>(
0,
(prev, curr) =>
prev + pow(int.parse(curr), numberString.length).toInt(),
);
}
void main() {
final result = isArmstrongNumber(153);
print(result); // true
}
我还解决了pow 返回num 的问题,这是一个问题。在这种情况下,我们可以安全地将其转换为 int 而不会出现问题。
fold 中有关此问题的详细信息
这里的问题是 Dart 试图根据方法的预期返回类型来猜测 fold 的泛型。由于== 运算符期望与Object 进行比较,因此fold 也期望只返回Object,而泛型最终为fold<Object>。
这对于第一个参数来说不是问题,因为int 是Object。但它会成为您的第二个参数的问题,因为Object 没有+ 运算符,所以您期望int 对象而不是Object。