Search code examples
groovy

How to assign groovy function to a variable and call it?


I want to do something like this:

boolean flag = ...;
def foo(String x, String y) {
  // ...
}
def foo2(String x, String y) {
  // ...
}
def fun = flag ? foo : foo2;
fun("aaa", "bbb");

is something simillar possible?


Solution

  • You can use method pointers:

    def foo(String x, String y) {
       "FOO $x $y"
    }
    def foo2(String x, String y) {
       "FOO-TWOOO $x $y"
    }
    
    boolean flag = false
    def fun = flag ? this.&foo : this.&foo2;
    println fun("aaa", "bbb") // prints "FOO-TWOOO aaa bbb"
    
    flag = true
    fun = flag ? this.&foo : this.&foo2;
    println fun("aaa", "bbb") // prints "FOO aaa bbb"
    

    With Groovy 3, you can do it the Java way too:

    def fun = flag ? this::foo : this::foo2;