在函数文字:
func(ch chan int) { ch <- ACK }(replyChan)`
在Defer语句的示例中:
// f returns 1func f() (result int) { defer func() { result++ }() // why and how? return 0}
我不清楚添加&使用“()”后封闭体,希望有人能够清楚地解释这一点。
它不是()必须添加后(只)一个闭包在延迟。语言规定 defer statement的任务,它的“表达式”总是必须是一个函数调用。为什么会这样?它与任何其他函数相同,在’defer’或不:
考虑:
func f() int { return 42 }
和
a := f
vs
b := f()
第一个表达式RHS是一个函数值。在第二个版本中,RHS是函数返回的值 – 即函数调用。
因此,语义是:
defer f
vs
defer f()
除了第一个版本在’defer’的上下文中没有意义,因此规范提到它必须是第二个形式(仅)。
它的IMHO也更容易学习,因为与’defer’语句之外的上述讨论的函数调用的正交性。
还要注意的是,函数调用不仅是fn-expr后跟(),而且表达式列表通常在括号内(包括空列表)。有很大的区别:
for i := range whatever { defer func() { fmt. Println(i) }()}
和
for i := range whatever { defer func(n int) { fmt. Println(n) }(i)}
第一个版本在执行闭包时打印’i’的值,第二个版本在执行defer语句时打印’i’的值。
总结以上是内存溢出为你收集整理的为什么在Golang中的闭包体后添加“()”?全部内容,希望文章能够帮你解决为什么在Golang中的闭包体后添加“()”?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)