Skip to content

Instantly share code, notes, and snippets.

@turboBasic
Last active May 25, 2022 11:24
Show Gist options
  • Save turboBasic/ea19a9617e651922a25ad49745f7cd6b to your computer and use it in GitHub Desktop.
Save turboBasic/ea19a9617e651922a25ad49745f7cd6b to your computer and use it in GitHub Desktop.
Method arguments processing in Groovy #groovy
String f(Object... varArgs) {
List args = varArgs == null ? [null] : varArgs
Map named = args
? (args[0] instanceof Map ? args[0] : [:])
: [:]
List positional = named ? args.drop(1) : args
"named: $named; positional: $positional; all: $args"
}
assert f() == 'named: [:]; positional: []; all: []'
assert f 1 == 'named: [:]; positional: [1]; all: [1]'
assert f null == 'named: [:]; positional: [null]; all: [null]'
assert f x: null == 'named: [x:null]; positional: []; all: [[x:null]]'
assert f null, null == 'named: [:]; positional: [null, null]; all: [null, null]'
assert f x: 1 == 'named: [x:1]; positional: []; all: [[x:1]]'
assert f([x: 1]) == 'named: [x:1]; positional: []; all: [[x:1]]'
assert f([x: 1], y: 2) == 'named: [y:2]; positional: [[x:1]]; all: [[y:2], [x:1]]'
assert f a:5, [x: 1], y: 2 == 'named: [a:5, y:2]; positional: [[x:1]]; all: [[a:5, y:2], [x:1]]'
assert f([x: 1], [y: 2]) == 'named: [x:1]; positional: [[y:2]]; all: [[x:1], [y:2]]'
assert f{} == 'named: [:]; positional: [Script1$_run_closure1@4606bcd6]; all: [Script1$_run_closure1@4606bcd6]'
assert f({}, {}) == 'named: [:]; positional: [Script1$_run_closure2@fda98c5, Script1$_run_closure3@7c4975e4]; all: [Script1$_run_closure2@fda98c5, Script1$_run_closure3@7c4975e4]'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment