我已经养成了在任何地方使用Closures代替常规方法的习惯,即使我不需要访问自由变量.所以,我会用这个:
def addNumbers = { left, right -> left + right }
..而不是这个:
def addNumbers (left,right) { left + right }
这是不好的做法吗?我更喜欢使用闭包而不是方法时获得的额外功能,我更喜欢语法.
谢谢!
鉴于这个Groovy程序:
def f(x) { return x }
g = f
println g(42)
Run Code Online (Sandbox Code Playgroud)
将程序提供给Groovy(版本2.4.12)解释程序时,将打印一条错误消息:
groovy.lang.MissingPropertyException:没有这样的属性:f表示类:x at x.run(x.groovy:3)
但是,将程序更改为
def f = { x -> x }
g = f
println g(42)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,使解释器打印为"42".
为什么这两种定义的f处理方式不同?有没有办法调整g前一个版本运行的定义(可能使用&.运算符)?