Golang
接下来分享Java、Groovy、Python和Golang中是如何把方法当做参数的。
Part1Java
java.util.function.Functionjava.util.function.BiFunctionjava.util.function.Supplier
1定义方法闭包
单个参数:
Function plus10 = f -> f * 10;
两个参数:
没有参数:
2方法中返回闭包和使用闭包
返回方法闭包:
把闭包当做参数:
看得出来,Java还是比较严格的,不同的参数用的类都不一样,的确不如其他语言灵活。
Part2Groovy
Groovy语言大部分语法是Java兼容的,但是在闭包这个功能上,差别还是挺大的,个人感觉完全优于Java体验。Groovy在语法上非常灵活,有时候我得自己摸索一下才行,按照Java的写法也行,按照Groovy写法也行,有时候混着写也行。个人建议最好使用Groovy语法,避免万一以后升级导致不兼容。
3定义方法闭包
无参数:
def plussss = {return 10}
或者:
def plusss = () -> 10
单个参数:
def pluss = f -> f + 10
或者:
def plussa = {f -> return f + 10}
又或者:
def plussaa = {f -> f + 10}
多个参数:
def plus = {x, y -> return x + y * 2}
其他写法省略……
4方法中返回闭包和使用闭包
返回方法闭包:
把闭包当做参数:
Part3Python
Lambda
5定义方法闭包
单个参数:
ff = lambda f: f + 19
多个参数:
ss = lambda x, y: x * y + 1
看得出来,Python还是挺简单的,这一点跟Groovy平分秋色。
6方法中返回闭包和使用闭包
返回方法闭包:
把闭包当做参数:
Python语法还是有点不适应,只能练习到这种程度了。
Part4Golang
终于轮到Golang,最近在学习Golang基础,已经写了一个简单的HttpClient客户端,算是有点小成绩,下一步计划是用Golang重新测试一下Golang协程和Java线程在做性能测试对比。Golang的语法比较统一,既不像Java那样繁琐,也不像Groovy有太多灵活语法,跟上文中Python直接在方法中返回闭包的写法类似,而且在直接定义和方法中返回语法一致,而且是强一致性。
7定义方法闭包
ff:= func(f int) int{return f * 11}
多个参数方法省略……
8方法中返回闭包和使用闭包
返回方法闭包:
把闭包当做参数:
PS:其实除了Java不同参数数量和类型需要额外定义使用不同的类以外,其他语法都可以规避掉这一点。在自定义闭包和方法中闭包使用,语法都是通用的。这里也体现出来非静态语言的灵活性。