in ran into an issue with default arguments ```my...
# getting-started
t
in ran into an issue with default arguments
Copy code
myFunc(p1: String, p2: Consumer<*>, p3: String = "") {}
// is not the same as 
myFunc(p1: String, p2: Consumer<*>) { myFunc(p1, p2, "") }
myFunc(p1: String, p2: Consumer<*>, p3: String) {}
the compiler does not allow you to use trailing lambdas if you use default arguments i'm not really sure if it's an issue, but did seem odd to me
n
I'm confused by the code snippet. why does only one have a body?
t
the body is irrelevant, but i added curly braces now
n
what if you put p2 last?
t
unless i declare myFunc as two separate functions, i'm not able to call
Copy code
myFunc("test") { }
that will work
n
trailing lambdas always require the lambda be the last argument tho
t
it is the last argument, since the third argument is omitted (it has a default value)
i don't see why the compiler cares if it's defined as two different functions, or one function with a default value
n
if there's an argument after it, then it's not the last argument
default arguments don't completely obviate the need for overloads unfortunately
t
it would seem so
just a small gotcha after auto-converting some java code
r
I don't understand your issue with putting the consmer last. It works fine for me: https://pl.kotl.in/B_F3K_Auz
Copy code
typealias Consumer<T> = (T) -> Unit

fun myFunc(p1: String, p2: String = "", p3: Consumer<String>) {
    p3(p1 + p2)
}

fun main() {
    myFunc("Test") { println(it) }
    myFunc("Test", "2") { println(it) }
}
(You may have a problem using
Consumer<*>
as that will accept only
Nothing
.)
n
it's not always an option to change the signature 🙂
r
Yes, that is true, but unless I missed something the discussion was:
Max Aller: what if you put p2 last?
david: unless i declare myFunc as two separate functions, i'm not able to call
myFunc("test") { }
I guess this is more of a discussion about what "last argument" means, and I'm just fixating on the wrong thing. Feel free to ignore me 🙂
n
it's understandable that it's a point of confusion 🙂
t
@Ruckus the two lines you quote was not a question+response, it was two messages that were sent at the same time. a more accurate representation of the conversation would be
Max Aller: what if you put p2 last?
david: that will work
but i can't change the signature
n
you could add an extension method with the arguments in the correct order perhaps
r
Ah, got it. My bad.