groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniil Ovchinnikov <daniil.ovchinni...@jetbrains.com>
Subject Re: Improving named-argument support
Date Tue, 16 Jan 2018 13:16:27 GMT
> @NamedVariant
> def foo(a, @NamedParam String b, c, @NamedParam(required=true) d) {
>   println "$a $b $c $d"
> }
> 
> which produces a method like this:
> 
> def foo(Map _it, a, c) {
>   assert _it.containsKey('d')
>   this(a, _it.b, c, _it.d)
> }

Do you mean there will be additional method while original method will be left as is?

In case of named parameter with default value, there will be tree methods:

def foo(a, @NamedParam b = 42, @NamedParam c) { a+b+c }  // source method

def foo(Map _it, a) { this(a, _it.b, _it.c) } // generated from @NamedParam
def foo(a, c) { this(a, 42, c) }              // generated from default value
def foo(a, b, c) { a+b+c }                    // actual method

Will default be passed if I invoke code with foo(“value for a”, c: 13) ?

How ‘required’ is supposed to work with default parameters?
Why not leverage default params instead of introducing ‘required’? I.e. all named params
are required by default.

—

Daniil Ovchinnikov
Software Developer
JetBrains
jetbrains.com
“Drive to develop”




Mime
View raw message