fn return1() {
if (return { print!("1") }) {
}
}
fn return2() {
if return { print!("2") } {
}
}
fn break1() {
loop {
if (break { print!("1") }) {
}
}
}
fn break2() {
loop {
if break { print!("2") } {
}
}
}
fn main() {
return1();
return2();
break1();
break2();
}
return
可以直接中斷函式執行。可以攜帶返回值。
一般情況下,如果後續有相連的值表示式,會一起計算。break
可以中斷迴圈執行,可以攜帶返回值。
除非有明確的計算表示式,否則一般不會直接計算,尤其是{}
。()
規定計算域。
這裡的主要問題,其實還是和()
規定的計算域相關。
不管是return
還是break
,到底是直接中斷還是 攜帶返回值,主要看計算表示式。
尤其是它們出現在一些特殊地方的時候。
return1
fn return1() { if (return { print!("1") }) { } }
由於
()
的作用,return {print!("`")}
作為一個完整表示式。
列印1
後,中斷了函式執行,返回{}
計算結果,unit
。return2
fn return2() { if return { print!("2") } { } }
因為
return
計算表示式的特性,{}
中的列印得以執行.
列印2
,返回unit
.break1
fn break1() { loop { if (break { print!("1") }) { } } }
同理,因為
()
的作用,會進行列印語句的執行,列印1
,返回unit
。break2
fn break2() { loop { if break { print!("2") } { } } }
因為
break
對{}
不敏感,因此這裡並不會進行列印。
121
。
驗證一下我們的理解
fn break2() {
loop {
if break ({print!("2")}) {
}
}
}
後面跟隨()
會被識別為計算表示式, 因此也會列印2
。
內部的{}
在()
的作用下被強制計算了。
也再次說明了()
的計算屬性和break
的計算特徵。
本作品採用《CC 協議》,轉載必須註明作者和本文連結