go - 我不明白返回函数的结果
问题描述
我有以下初始代码:
package main
func test(x int) (func(), func()) {
return func() {
println(x)
x += 10
}, func() {
println(x)
}
}
func main() {
a, b := test(100)
a()
b()
}
输出是
100
110
如果我按如下方式编辑代码
package main
func test(x int) (func(), func()) {
return func() {
println(x)
}, func() {
println(x)
x += 10
}
}
func main() {
a, b := test(100)
a()
b()
}
结果是
100
100
我希望最后一个结果如下,但事实并非如此,为什么?
110
100
解决方案
因为a
是一个打印 的函数x
,并且b
是一个打印x
并添加 10 的函数。如果您a
先调用然后再调用b
,它将打印 100 两次,然后向其添加 10,但永远不会打印。先调用b
然后再调用a
,它会打印你想要的。
推荐阅读
- swift - 雪碧一直在屏幕外移动
- python-3.x - 如何仅提取数字并打印为字符串
- javascript - 浏览器如何将 CSS 百分比单位转换为像素?
- node.js - 如何在主进程中使用 electron.js 中的真正加密模块?
- java - Tictac toe 游戏不断停止并出现 logcat 错误 java.lang.IllegalStateException:Could not execute method for android:onClick
- javascript - 在javascript中录制麦克风也可以捕捉扬声器声音
- qr-code - 在理解 QR 码版本以选择/执行 Reed Solomon 码时遇到问题
- python - 解析所需文件的列表python
- flutter - 输入'列表
' 不是类型 'List 的子类型 ' 在类型转换中 - autodesk-forge - 查看器扩展网络呼叫超时