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 號碼的問題。我試圖閱讀檔案,但無法真正解決問題。
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));
感謝你的幫助。謝謝。
uj5u.com熱心網友回復:
如檔案所示,宣告為powpow回傳 a num,因此這是編譯器已知的靜態型別。根據它的引數,這num實際上可能是運行時的inta 或 a double(編譯器不會知道):
如果
x是一個int并且exponent是一個非負數int,結果是一個int,否則兩個引數首先被轉換為雙精度,結果是一個double。
同時,您的呼叫reduce對 a 進行操作List<int>,因此需要int引數。
如果您可以在邏輯上保證第一個引數是 anint并且第二個引數是非負數(在這種情況下您可以),您可以安全地將結果pow轉換為 an 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 type沖突。
(順便說一句,您鏈接到的檔案相當舊(它來自 Dart 1 SDK!)。您應該始終參考最新的 SDK 檔案(或您擁有的 SDK 版本的檔案)。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/468631.html
標籤:镖
下一篇:我應該給出什么論據?
