¿El hecho de que esto no se compile significa que no son tipos de primera clase?
fun foo(s: String): Int = s.length // This won't compile. val bar = foo¿Hay alguna manera de hacer esto sin recurrir a OO?
¿El hecho de que esto no se compile significa que no son tipos de primera clase?
No, no lo hace.
En Kotlin, para hacer referencia a una función o una propiedad como un valor, debe usar referencias invocables , pero es solo una forma de sintaxis para obtener un valor de un tipo de función :
fun foo(s: String): Int = s.length val bar = ::foo // `bar` now contains a value of a function type `(String) -> Int`Una vez que obtiene ese valor, no está limitado en la forma en que trabaja con él, que es de lo que se tratan las funciones de primera clase.
Puede usar la referencia a la función :: :
fun foo(s: String): Int = s.length val bar = ::fooY luego invocarlo:
bar("some string")