从函数返回的正确方法是什么?

我很困惑应该如何从函数返回值。我正在尝试下面的例子:

  • 将 false 传递给函数 a

  • c 的值在函数 a 中将为 false

  • 它将进行递归调用,这会将 c 的值从 false 更改为 true

  • 所以函数应该返回一个字符串“true”和bool true,但它返回一个字符串“false”和bool false

package main


import (

    "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


蛊毒传说
浏览 88回答 3
3回答

哔哔one

当 为 false 时,您的递归代码将始终返回“false” false c。请参阅下面的正确代码。package mainimport (    "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)}

慕莱坞森

这将导致 2 级递归。在第一级中,您将 c 设置为 false。然后你调用 a(true) 并且你处于返回 true 的第二级。现在您回到了第 1 层的 a(true) 行,下一行是将 false 作为字符串和布尔值返回。因此,最终输出为 false。我认为您正在尝试使用返回值,但现在情况并非如此。

德玛西亚99

目前尚不清楚您认为您的代码应该做什么,但它实际上在做什么:您a使用以下值进行调用false:它检查是否c为真:if c {但事实并非如此,所以它继续它再次调用a,这次使用 value true,但完全忽略结果:a(true)然后返回 false:return "false", false这意味着步骤 #2 是完全无操作的(并且可能被编译器完全删除)。也许你想用 的返回值做一些事情a(true)?
打开App,查看更多内容
随时随地看视频慕课网APP