为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
蛊毒传说 2023-07-26 17:10:01
我很困惑应该如何从函数返回值。我正在尝试下面的例子:将 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)

}


查看完整回答
反对 回复 2023-07-26
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

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

我认为您正在尝试使用返回值,但现在情况并非如此。


查看完整回答
反对 回复 2023-07-26
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

目前尚不清楚您认为您的代码应该做什么,但它实际上在做什么:

  1. a使用以下值进行调用false

    它检查是否c为真:

    if c {

    但事实并非如此,所以它继续

  2. 它再次调用a,这次使用 value true,但完全忽略结果:

    a(true)
  3. 然后返回 false:

    return "false", false

这意味着步骤 #2 是完全无操作的(并且可能被编译器完全删除)。

也许你想用 的返回值做一些事情a(true)



查看完整回答
反对 回复 2023-07-26
  • 3 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信