Desde método de extensión hasta lambda con receptor, ¿cómo?
class AlgunaClase{
val logger = ...
fun (String).capitalizarUltimo():String {
logger.info("se ha llamado capitalizarUltimo")
return this.substring(0,this.length-1) + this.substring(this.length-1,this.length).toUpperCase()
}
val comoLambda: (String).()->String = ::capitalizarUltimo
}
Quiero decir, siempre podría escribir
val comoLambda: (String).()->String = {
this.capitalizarUltimo()
}
Pero ¿no hay un azúcar sintáctico usando ::
(como con ::println
)?
davy.ai
Sí, existe un azúcar sintáctico que utiliza
::
y que se puede utilizar para hacer referencia al método de extensióncapitalizeLast()
como una lambda. Se vería así:Esto crea una referencia al método
capitalizeLast()
, que se puede llamar en un objetoString
como una lambda utilizando el métodoinvoke()
. Por ejemplo:Tenga en cuenta que el método
invoke()
también se puede llamar utilizando la sintaxis abreviada: