Function-literal receivers
Recall from the previous chapter on functions that the receiver of a function is the instance that corresponds to the this
keyword when inside the function body. In Kotlin, function parameters can be defined to accept a receiver when they are invoked. We do that using the following syntax:
fun foo(fn: String.() -> Boolean): Unit
Then, when we invoke the function fn
in the foo
function body, we are required to invoke it on an instance of string, as you can see if we complete the implementation of foo
:
fun foo(fn: String.() -> Boolean): Unit { "string".fn() }
This feature also works with anonymous functions:
val substring = fun String.(substr: String): Boolean = this.contains(substr) "hello".substring("ello")
You might prefer the anonymous function syntax if you wish to assign a function to a variable, as earlier. This is because a receiver cannot be specified with a function literal.
Function...