Groovy 非常常规的惯例

Groovy 非常常规的惯例,groovy,Groovy,我已经多次看到奇怪的代码: ... private currencyFormat = NumberFormat.currencyInstance def convert = currencyFormat.&parse ... 奇怪的意思是->&解析。为什么需要逻辑AND运算符,还有谁可以使用它?这是一个方法指针 convert现在实际上是一个委托给解析方法的闭包 例子 它没有一个例子,而且 作为处理重载的例子,考虑一个具有2种静态方法的类: class Test { static

我已经多次看到奇怪的代码:

...
private currencyFormat = NumberFormat.currencyInstance
def convert = currencyFormat.&parse
...

奇怪的意思是->&解析。为什么需要逻辑AND运算符,还有谁可以使用它?

这是一个方法指针

convert
现在实际上是一个委托给解析方法的闭包

例子 它没有一个例子,而且

作为处理重载的例子,考虑一个具有2种静态方法的类:

class Test {
  static void printSomething( String thing ) {
    println "A:$thing"
  }

  static void printSomething( String thing, String thing2 ) {
    println "B:$thing$thing2"
  }
}
我们可以参考
printSomething
方法:

def ref = Test.&printSomething
然后,我们可以将其传递给单个项目列表上的每个调用:

// prints A:a and A:b
[ 'a', 'b' ].each ref
或者我们可以将两项传递给它,它将选择正确的重载方法来调用:

// prints B:ab and B:cd
[ [ 'a', 'b' ], [ 'c', 'd' ] ].each ref 

这并不意味着
。将方法作为闭包重用是一种特殊的语法。现在,您可以在可以传递闭包的位置使用
convert
,如
grep
find
或类似方法。

这不是位操纵操作符。之所以选择与符号,可能是因为C的地址运算符使用的是与符号。其思想是,可以在特定实例上传递对方法的引用

假设你有一些逻辑,比如:

def stuff = null
if (condition) {
    stuff = foo.doThis(a, b, c)
} else {
    stuff = bar.doOther(a, b, c)
}
您可以使用如下方法指针重写:

def myMethod = condition ? foo.&doThis : bar.&doOther
def stuff = myMethod(a, b, c)

你能提供一些使用方法指针的例子吗?“我在互联网上找不到正常的资料。@鲍勃添加了几个链接和一个超载的例子