我正在尝试在 Golang 中实现最简单的调用堆栈。作为示例,我从《Grocaem 算法》一书中获取了代码,该代码是用第二个 Python 编写的。
def greet(name):
print "hello, " + name + "!"
greet2(name)
print "getting ready to say bye..."
bye()
def greet2(name):
print "how are you, " + name + "?"
def bye():
print "ok bye!"
这是我在 Go 中实现的尝试。问题是我无法弄清楚为什么我不能将 bye() 函数嵌套在 greet2 函数中并在 greet 函数中调用它。我已经阅读了有关范围的信息,但是那里没有合理的示例。因此,如果您能告诉我如何修复此代码,我将非常感谢您。
package main
import "fmt"
func greet(name string) string {
fmt.Printf("hello, %v !\n", name)
greet2(name)
fmt.Printf("getting ready to say bye...\n")
bye() // тут проблема
return name
}
func greet2(name string) (func(), string) {
fmt.Printf("how are you, %v ?\n", name)
bye := func() { // и тут
fmt.Println("ok bye!")
}
return bye(), name
}
func main() {
greet("Sasha")
greet2("Sasha")
}
python函数不是嵌套的
bye()
,只是书中的格式出错了(对于python来说这是一场灾难!)。在 Python 中(不仅如此),您不能只从另一个函数中获取和调用嵌套函数。会出现运行时错误:NameError: global name 'bar' is not defined
在你尝试调用它的地方。实际上,代码应该是这样的:
而且我认为你在 go 中重写它并不难。
如果您仍然想要一个带有嵌套函数及其返回的示例,那么它应该是这样的:
你有几个错误。在一种情况下,您返回的不是函数,而是它的值。否则,该函数
bye()
尚未定义。游乐场。