groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Henrik Martin <hen...@netgate.net>
Subject Re: Emulating method overloading with closures?
Date Wed, 15 Apr 2015 08:04:47 GMT
Thanks Keith and Dinko! I knew there would be a groovy way of doing this :-)

-H

On 4/15/15 12:46 AM, Dinko Srko─Ź wrote:
> Parameters with default values is a good solution. There is another
> one, perhaps less elegant, but more flexible. It can be used in places
> where default values cannot help e.g. where the types of parameters
> differ.
>
>    def foo = new Closure(null) {
>        String doCall(int arg1, String arg2) { arg1 + arg2 }
>        int doCall(int arg1, int arg2) { arg1 + arg2 }
>    }
>
>    assert foo(42, 'bar') == '42bar'
>    assert foo(40, 2) == 42
>
> Cheers,
> Dinko
>
> On 15 April 2015 at 03:25, Keith Suderman <suderman@anc.org> wrote:
>> You can specify default values for parameters in Groovy, so you should be able to
achieve what you want with
>>
>> def foo = {String args, boolean x, boolean y, boolean z=true -> ... }
>>
>> foo("bar", true, true)
>> foo("bar", true, true, false)
>>
>> Keith
>>
>> On Apr 14, 2015, at 8:19 PM, Henrik Martin <henrik@netgate.net> wrote:
>>
>>> Hi. I have a Groovy method that is overloaded, and I'm trying to achieve something
similar with closures. The methods look something like this:
>>>
>>> int foo(String args, boolean x, boolean y) { ... }
>>> int foo(String args, boolean x, boolean y, boolean z) { ... }
>>>
>>> The first method basically just forwards to the overloaded version, passing a
'z' argument with a default value. Is there any way I can convert these two methods to two
closures in the same class in a similar fashion as method overloading? The problem I run into
seems to be that closures are object instances, so I can't really have two closures with the
same name in the same class. Maybe using closures isn't appropriate in this case? What would
be a "Groovier way" of doing this? The reason I tried the closure approach is the "method
as an object instance" paradigm fits pretty well with the particular project I'm working on.
But I'm sure there's a better way of doing this...
>>> Thanks,
>>>
>>> -H
>>>
>> ------------------------------
>> Research Associate
>> Department of Computer Science
>> Vassar College
>> Poughkeepsie, NY
>>
>>


Mime
View raw message