我很困惑應該如何從函數返回值。我正在嘗試下面的例子:將 false 傳遞給函數 ac 的值在函數 a 中將為 false它將進行遞歸調用,這會將 c 的值從 false 更改為 true所以函數應該返回一個字符串“true”和bool true,但它返回一個字符串“false”和bool falsepackage mainimport ( "fmt")func a(c bool) (string, bool) { if c { return "true", true } a(true) return "false", false}func main() { s, ok := a(false) fmt.Println(s, ok)}https://play.golang.org/p/uSIN2k0G3QW
3 回答

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
當 為 false 時,您的遞歸代碼將始終返回“false” false c。請參閱下面的正確代碼。
package main
import (
"fmt"
)
func a(c bool) (string, bool) {
if c {
return "true", true
}
return a(true)
}
func main() {
s, ok := a(false)
fmt.Println(s, ok)
}

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
這將導致 2 級遞歸。在第一級中,您將 c 設置為 false。然后你調用 a(true) 并且你處于返回 true 的第二級。現在您回到了第 1 層的 a(true) 行,下一行是將 false 作為字符串和布爾值返回。因此,最終輸出為 false。
我認為您正在嘗試使用返回值,但現在情況并非如此。

德瑪西亞99
TA貢獻1770條經驗 獲得超3個贊
目前尚不清楚您認為您的代碼應該做什么,但它實際上在做什么:
您
a
使用以下值進行調用false
:它檢查是否
c
為真:if c {
但事實并非如此,所以它繼續
它再次調用
a
,這次使用 valuetrue
,但完全忽略結果:a(true)
然后返回 false:
return "false", false
這意味著步驟 #2 是完全無操作的(并且可能被編譯器完全刪除)。
也許你想用 的返回值做一些事情a(true)
?
- 3 回答
- 0 關注
- 172 瀏覽
添加回答
舉報
0/150
提交
取消