Go 从嵌套块返回,范围问题 基本概念
我正在学习Go,但我不知道如何从函数的内部块返回数据Go 从嵌套块返回,范围问题 基本概念,go,scope,Go,Scope,我正在学习Go,但我不知道如何从函数的内部块返回数据 package main import ( "fmt" ) func main() { fmt.Println("Hello, playground") if isTrue("asasa") { fmt.Println("isTrue is true") } } func isTrue(s string) bool { if s == "asasa" { fmt.P
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if isTrue("asasa") {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
if s == "asasa" {
fmt.Println("it matches")
return true
}
}
如何返回嵌套甚至多次嵌套块中满足的条件
真实案例场景
我收到一个h、c、L值的三元组,我想检查它是否与我之前存储其他三元组的2D切片唯一。
我循环遍历所有三元组,如果存在匹配,我希望isUnique返回false,否则返回true 检查函数返回的值,将其分配给变量,并在检查以下条件时在main中使用: 包干管
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if ok := isTrue("asasa"); ok {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
boolean := false
for i := 0; i < 5; i++ {
if s == "asasa" {
fmt.Println("it matches")
boolean = true
}
}
return boolean
}
在Go库中,您会发现如果if语句不
流到下一个语句,即主体以break结尾,
继续、转到或返回省略了不必要的else
在映射中,它还用于根据键检查值是否存在。查看此链接以了解有关逗号ok语法的更多信息
在上更新的工作代码修复编译错误::函数末尾缺少返回。比如说,
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, playground")
if isTrue("asasa") {
fmt.Println("isTrue is true")
}
}
func isTrue(s string) bool {
if s == "asasa" {
fmt.Println("it matches")
return true
}
return false
}
游乐场:
输出:
Hello, playground
it matches
isTrue is true
函数F中的return语句终止F的执行
对于您刚才添加的真实案例:
func isUnique(h, c, L float64) bool {
for i, color := range usedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
return true
}
如果我正确理解了您的问题,这是一个一般的逻辑问题,而不是golang问题或从块返回。您的代码存在问题:
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
} else {
return true
}
}
}
它只检查第一种颜色,而不是所有颜色。您真正想要的是首先检查它们是否匹配
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
只有当它们都不匹配时,才返回true
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
return true
}
非常感谢,我很抱歉,我承认这是一个愚蠢的问题,但在有效的围棋和围棋之旅中,这些技巧根本没有解释。您是否有机会提出较低级别的go文档建议?解决方案和逗号ok方法仅对1级嵌套块有效,但是,将if封装在一个中断中,以便再次完成整个过程。我想了解如何从无限或至少几个嵌套块返回。很抱歉,我不得不取消接受asnwer。@Maxiride ok检查我编辑的答案中的if语句。请编辑您的文章以获取更多信息,这样我将尝试了解您到底想要从代码中得到什么side@Maxiride您可以创建一个默认值为false的变量,然后在您的条件满足的地方更改它,这将帮助您只编写return语句once@Maxiride返回值是在您的条件下工作的正确方法。如果你的函数有一个return,我真的不理解这个问题,就返回吧。如果我在函数关闭之前添加了一个简单的return,这是一个编译错误,因为它需要一个bool,而不是由return生成的,那么就返回一个bool。但是,这并不能回答如何从多个嵌套块返回。我不应该做那个简单的例子,因为它会使答案产生偏差。@Maxiride:我已经在我的答案中添加了你的新例子。所以在这种情况下,if中的内部返回也起到了中断的作用?@Maxiride:是的。return语句充当函数级中断。无论嵌套的深度如何,它都会退出函数。请参阅我的答案中要返回的引用。
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
} else {
return true
}
}
}
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
func isUnique(h, c, L float64) bool {
for i, color := range usuedColors {
if color[0] == h && color[1] == c && color[2] == L {
fmt.Println("This color already exist!")
return false
}
}
return true
}