【问题标题】:Pow() function giving error regarding data typesPow() 函数给出有关数据类型的错误
【发布时间】:2022-06-19 17:22:22
【问题描述】:
import 'dart:math';

void main (){
    int num = 235;
    var numToString = num.toString();
    var result = numToString.split('').map(int.parse).reduce((t,e)=>pow(t,t)+pow(e,e));
    print(result);
}

我正在尝试解决一个需要我检查该号码是否为 Armstrong 号码的问题。我试图阅读documentation,但无法真正解决问题。

Error: A value of type 'num' can't be returned from a function with return type 'int'.
    var result = numToString.split('').map(int.parse).reduce((t,e)=>pow(t,t)+pow(e,e));

【问题讨论】:

    标签: dart


    【解决方案1】:

    the pow documentation 所示,pow 被声明为返回 num,因此这是编译器已知的 static 类型。根据其参数,num 在运行时实际上可能是intdouble(编译器不会知道):

    如果xint 并且exponent 是非负@​​987654332@,则结果是int,否则两个参数首先转换为双精度,结果是double .

    同时,您对reduce 的调用在List<int> 上运行,因此需要int 参数。

    如果您可以从逻辑上保证第一个参数是 int 并且第二个参数是非负数(在这种情况下您可以),您可以安全地将 pow 的结果转换为 int

    import 'dart:math';
    
    void main() {
      int num = 235;
      var numToString = num.toString();
      var result = numToString
          .split('')
          .map(int.parse)
          .reduce((t, e) => (pow(t, t) + pow(e, e)) as int);
      print(result);
    }
    

    或者,如果你想存储任意数字而不仅仅是整数,你可以使用List<num>而不是List<int>,方法是给.map一个显式类型参数,而不是让它从int.parse推断出来:

    import 'dart:math';
    
    void main() {
      int number = 235;
      var numToString = number.toString();
      var result = numToString
          .split('')
          .map<num>(int.parse)
          .reduce((t, e) => pow(t, t) + pow(e, e));
      print(result);
    }
    

    请注意,上述操作还需要重命名您的本地 num 变量以避免与 num 冲突类型

    (顺便说一句,您链接到的文档相当旧(它来自 Dart 1 SDK!)。您应该始终参考 the latest SDK documentation(或您拥有的 SDK 版本的文档)。)

    【讨论】:

    • 非常感谢您的回答。现在很有意义。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多