1 回答
TA贡献1853条经验 获得超9个赞
Scala 大量借鉴了函数式编程。去没有。
(如果你使用过多种其他编程语言,你绝对应该阅读Go 规范。它不是很长,因为 Go 不是一种非常大的语言,尽管新的泛型肯定会使事情复杂化一些。)
在 Go 中,func
关键字引入函数定义或函数类型,具体细节取决于上下文。关键字var
引入变量声明。1 所以:
func inc2(x int) int { return x + 1 }
定义了一个函数,inc2
,其代码如图所示。但:
var inc1 = // ...
声明然后初始化一个变量,inc1
. 变量的类型和初始值由注释掉的部分决定,所以:
var inc1 = func(x int) int { return x + 1 }
定义了一个函数(没有名字),其代码如下所示。然后将该函数分配给变量作为其初始值,因此变量的隐含类型是func (int) int
or function 接受一个 type 的参数int
并返回一个 type 的值int
。
创建变量后,您现在可以调用当前存储在该变量中的函数:
func callit(arg int) {
result := inc1(arg)
// ... do something with the result ...
}
或者您可以为变量分配一个新值,例如:
func overwrite() {
inc1 = func(a int) int { return a * 2 } // name `inc1` is now misleading
}
因为inc2是一个函数,你不能重新给它赋新值:它只是一个函数,不是变量。
1请注意,带有初始化的变量声明可以使用“短声明”形式:
func f() {
v := 3
// ...
}
我们省略了类型,只说“使用表达式的类型来确定声明的类型”。这声明并初始化变量。短声明只能出现在块范围内,因此它们必须在某个函数内。除了省略关键字外,它们不会做任何你通过包含关键字或有时包含多个关键字var无法做到的事情:varvar
result, err := doit()
可能需要:
var result someType
var err error
result, err = doit()
在不使用简短声明形式编写时。
- 1 回答
- 0 关注
- 143 浏览
添加回答
举报