错过回报让我发疯

我正在尝试学习 Go,它进行得非常好,除了函数 return 语句,我一生都无法掌握这些语句。在书中的一个练习中,建议构造一个函数,将 int 减半并返回减半的 int,如果是偶数或奇数(减半),则返回一个布尔值。没有问题,这是相关的代码。

func checker(input int) (int, bool){
    if (((input /2) % 2) == 0) {
        return input / 2, true
    } else {
        return input / 2, false
    }
}

但是当试图将其转换为接受切片时,我发誓我无法理解回报在哪里。这里再次是相关的代码:

func checker(args ...int) (int, bool){
    for _, v := range args {
        if (((v /2) % 2) == 0) {
            return v / 2, true
        } else {
            return v / 2, false
        }
    }
}

func main () {
    xs := []int{3,45,6,32,43,76,42,4,77,8}
    fmt.Println(checker(xs...))
}

我想现在我明白了我提出的代码的几个问题,谢谢你的回答。

回答

不能保证checker()得到多于零个参数,在这种情况下循环体将被执行零次,所以没有return statements would be reached.

所以编译器抱怨缺少返回是正确的,因为这个条件是在运行时决定的。

例如,如果您传递0arguments: checker(),则它是有效的,如果return不需要a则会导致问题。

所以只需添加一个return具有合理返回值的语句,通常是结果类型的零值:

func checker(args ...int) (int, bool){
    for _, v := range args {
        if (((v /2) % 2) == 0) {
            return v / 2, true
        } else {
            return v / 2, false
        }
    }
    return 0, false
}

Also note that this loop only checks the first passed argument and returns, probably not what you want.


以上是错过回报让我发疯的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>