函数类型是一种特殊的数据类型,表示计算机语言中可以被调用的函数。
在Gox语言中,函数类型是这样定义的。
myAdd = fn(a, b) {
return a + b + b
}
c = myAdd(3, 5)
println(c)
upperPrintln = fn(s ...) {
for _, v = range(s) {
if typeOf(v) == "string" {
print(tk.ToUpper(v))
} else {
printf("%v", v)
}
}
println()
}
upperPrintln("a", "bcd", 123)
sum = fn(n...) {
t = 0
for _, a = range(n) {
t += a
}
return t
}
println(sum(1, 2, 3, 1.8))
println2 = fn(s...) {
println(s...)
println(s)
println()
}
println2(1, "abc", 2.6, true)
println2(myAdd(2.9 ,7.1))
运行结果是这样的。
λ gox -gopath functionType
13
ABCD123
7.8
1 abc 2.6 true
[1 abc 2.6 true]
17.1
[17.1]
其中,myAdd函数是自己定义的一个函数类型的变量,接受两个参数a和b,并计算出a+b+b的结果。upperPrintln函数则是接受任意个参数,并把他们转换成大写后逐个输出。sum函数则是简单地接受任意个数字并把他们的总和计算出来。Gox语言中使用关键字fn来定义函数,也兼容func关键字。
注意,可变个数的参数用省略号…表示,如果要遍历它的话,用for…range…循环即可,如果要直接传入到其他带可变长参数的函数中,直接用s…这样带入即可,本例中println2函数就演示了这样传递的方法,这个函数很简单,就是比println函数多输出一个回车换行符。
注意println2函数中,还演示了把可变长参数直接输出,证明了它就是按一个切片(数组)来传递的。
* 注:由于0.995版本后,Gox已经支持一般的func add(a, b)这样的定义函数的方法,因此下面的内容已经无效,仅留作对旧版本的参考。
另外,特别需要注意的是,Gox语言中没有一般语言中普通的函数定义方式(定义对象类的方法时除外),例如:
fn myAdd(a, b) {
return a + b + b
}
只能是:
myAdd = fn(a, b) {
return a + b + b
}
或者用匿名函数,例如:
fn(a, b) {
return a + b + b
}(3, 4)