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