我是 Rust 的新手。如果有人可以幫助我,那就太好了。第一個代碼有效,但第二個代碼無效。
#![allow(unused)]
fn main() {
let y = 3;
println!("{} Liftoff!", countdown(y));
}
fn countdown(mut y: u8) -> u8 {
let coun = loop {
println!("{}", y);
y -= 1;
if y == 1 {
return (y);
}
};
}
我想while或for自動回饋一個值。如何在回圈中回傳值while?for
#![allow(unused)]
fn main() {
let y = 3;
println!("{} Liftoff!", countdown(y));
}
fn countdown(mut y: u8) -> u8 {
while y != 0 {
y -= 1;
}
}
/*fn countdown () -> u8{
for y in (1..4).rev(){
}
}*/
uj5u.com熱心網友回復:
- 回圈是rust 中的運算式。這意味著您可以撰寫
let x = loop { /* ... */ };. 但是,在您的第一個片段中,您不會從回圈中回傳值(您試圖分配給coun),而是從函式中回傳。你可以把它改寫成這樣:
fn countdown (mut y:u8)-> u8 {
loop {
println!("{}",y);
y-=1;
if y==1 {
break y;
}
} // notice the lack of semicolon here!
}
這里有一個回圈,它回傳一個u8(作為 en 運算式),然后從函式回傳這個值。
break您可以通過 using陳述句從回圈運算式回傳值。在你的第二個片段中沒有break,所以這個while回圈回傳一個 unit type()。因為這是函式 rust 中的最后一個運算式,它試圖回傳它,并給你一個錯誤,因為你說這個函式應該 returnu8,但你試圖 return()。要解決這個“問題”,您可以添加一個陳述句,但是使用這樣的回圈break會很奇怪。whileforlooploop 與and非常不同while。您應該將其視為每個. 你仍然可以使用continueandbreak陳述句。但是,您不能break與值一起使用。for回圈必須始終計算為()。
獎金
你知道你可以給回圈標簽嗎?這在您有嵌套回圈時非常有用(例如,當您有主游戲回圈并在其中有一個事件佇列回圈時)。這意味著您可以撰寫如下所示的代碼:
let test = false;
let test2 = true;
let x = 'outer: loop {
'inner: loop {
if test {
break 'outer 42;
} else if test2 {
continue 'inner;
} else {
continue 'outer;
}
}
};
您可以在此處閱讀有關回圈運算式和回圈標簽 的詳細檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/512358.html
