走失 returns 快把我逼疯了
Go missing returns are driving me crazy
我正在努力学习 Go,除了函数 return 语句外,它进展顺利,我一生都无法掌握。
在一本书的练习中,建议构造一个将 int 减半的函数,return 将减半的 int 和偶数或奇数(减半)与 bool。没问题,这是相关代码。
func checker(input int) (int, bool){
if (((input /2) % 2) == 0) {
return input / 2, true
} else {
return input / 2, false
}
}
但是当试图将其转换为接受切片时,我发誓我无法理解 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
}
}
}
func main () {
xs := []int{3,45,6,32,43,76,42,4,77,8}
fmt.Println(checker(xs...))
}
我想现在我明白了我提供的代码中的几个问题,感谢您的回复。
无法保证 checker()
获得超过 零个 个参数,在这种情况下,循环体将执行零次,因此没有 return
语句将达到。
因此编译器有权抱怨缺少 return,因为此条件是在运行时决定的。
例如如果您传递 0
个参数:checker()
,它是有效的,如果不需要 return
会导致问题。
所以只需添加一个 return
语句,其中包含合理的 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
}
另请注意,此循环仅检查第一个传递的参数和 returns,可能不是您想要的。
你return只在For循环作用域中。 Return 在 for 循环之后。如果您的参数为空,那么您的循环不会 运行 并且没有达到 return。所以需要在for循环后加一个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
}
我正在努力学习 Go,除了函数 return 语句外,它进展顺利,我一生都无法掌握。 在一本书的练习中,建议构造一个将 int 减半的函数,return 将减半的 int 和偶数或奇数(减半)与 bool。没问题,这是相关代码。
func checker(input int) (int, bool){
if (((input /2) % 2) == 0) {
return input / 2, true
} else {
return input / 2, false
}
}
但是当试图将其转换为接受切片时,我发誓我无法理解 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
}
}
}
func main () {
xs := []int{3,45,6,32,43,76,42,4,77,8}
fmt.Println(checker(xs...))
}
我想现在我明白了我提供的代码中的几个问题,感谢您的回复。
无法保证 checker()
获得超过 零个 个参数,在这种情况下,循环体将执行零次,因此没有 return
语句将达到。
因此编译器有权抱怨缺少 return,因为此条件是在运行时决定的。
例如如果您传递 0
个参数:checker()
,它是有效的,如果不需要 return
会导致问题。
所以只需添加一个 return
语句,其中包含合理的 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
}
另请注意,此循环仅检查第一个传递的参数和 returns,可能不是您想要的。
你return只在For循环作用域中。 Return 在 for 循环之后。如果您的参数为空,那么您的循环不会 运行 并且没有达到 return。所以需要在for循环后加一个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
}