在python中可以这么写:
```python
def haha():
def ha():
return "000"
return ha()
```
但是如果在go中定义的话就会遇到问题,为什么
```go
func main(){
//下面三个如果定义在main函数中就会报错 为什么
func squeare(n int) int { return n * n};
func negative(n int) int { return -n};
func product(m, n int) int { return m*n};
}
```
编译报错:
`syntax error: unexpected squeare, expecting (`
请问这是为什么呢 ,可以从哪里查找资料?
Go中的函数也是第一类对象,可以按下面这三种形式实现:
``` go
package main
import(
"fmt"
)
func main(){
result1 := haha1()()
fmt.Println(result1)
result2 := haha2()()
fmt.Println(result2)
result3 := haha3()()
fmt.Println(result3)
}
//返回匿名局部函数
func haha1() func() string {
return func() string {
return "000"
}
}
//返回具名局部函数
func haha2() func() string {
ha := func() string {
return "000"
}
return ha
}
//返回具名包级函数
func haha3() func() string {
return ha
}
func ha() string {
return "000"
}
```
#2
更多评论
* 关于申明:**拥有函数名的函数只能在包级别语法块中被声明**,这句话来自Go语言圣经: https://books.studygolang.com/gopl-zh/ch5/ch5-06.html
* 关于分号:参见2.3.4: https://books.studygolang.com/gopl-zh/ch2/ch2-03.html
* 关于匿名函数参见2楼或上述链接里的匿名函数
* 关于你python代码,我真看不见
#3