我很困惑应该如何从函数返回值。我正在尝试下面的例子:将 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 关注
- 126 浏览
添加回答
举报
0/150
提交
取消