Gox语言中的函数类型-GX9.1

函数类型是一种特殊的数据类型,表示计算机语言中可以被调用的函数。

Gox语言在春天

在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)

猜你喜欢

转载自blog.csdn.net/weixin_41462458/article/details/107787884