Aparece el error "No coinciden los types" cuando uso una function como parámetro en Kotlin.

Espero utilizar la function AA como el parámetro de la function BB en el siguiente código, pero obtengo los dos errores.

Error 1: espero asignar el resultado de la function cc a dd, pero fallé.

Error 2: espero invocar la function BB, pero el parámetro AA (3) es incorrecto.

¿Cómo puedo corregir los errores? ¡Gracias!

class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) BB(1,AA(3)); //Error 2 } fun AA(aa:Int): Int{ return aa+10 } fun BB(bb:Int, cc:(Int) -> Int){ val dd:Int=cc(Int); //Error 1 Toast.makeText(getApplicationContext(), bb+dd, Toast.LENGTH_LONG).show(); } } 

Su syntax de Kotlin es incorrecta.

Cómo lo has escrito, el método BB sería:

fun BB(bb: Int, cc: Int) {

Lo que estás pasando BB es el RESULTADO de la function AA (también conocido como: un Int ).

En otras palabras, ¿por qué está recibiendo una function (AA) dentro (BB) si ya está invocando la function cuando llama "BB"? Como AA toma un Int y devuelve un Int, la firma de la function BB espera solo dos inputs. La llamada a AA(Int) sucedió en su línea ERROR 2 .

No está claro lo que intenta hacer (dado el código de su Toast), pero puede usar las references de TypeAlias ​​& Bound como esta:

 typealias SomeType = (Int) -> Int class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val a = this::AA // Save a Bound Reference to the function. BB(1, a) // Call BB and pass a value and a function } fun AA(aa: Int): Int { return aa + 10 } fun BB(bb: Int, cc: SomeType) { val dd = cc(bb) // call `cc` which is really `AA(Int) -> Int` Toast.makeText(getApplicationContext(), dd, Toast.LENGTH_LONG).show() } } 

testing esto.

 fun AA(aa: Int): Int { return aa + 10 } fun BB(bb: Int, cc: Int) { val dd: Int = cc Toast.makeText(getApplicationContext(), bb + dd, Toast.LENGTH_LONG).show() }