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() } 
  • Cómo pasar la matriz de cadenas al bash de correo electrónico de Android
  • ¿Cómo puedo volver a dibujar un Anko frameLayout cuando cambia mi model?
  • Kotlin - Cómo concatenar correctamente una Cadena
  • Cómo ocultar la barra de navigation de Android o el button cuadrado en la barra de navigation
  • Dokka: omita la generación de javadoc para los packages pnetworkingeterminados de Android
  • Error: no se encontró el procesador de annotations '__gen.AnnotationProcessorWrapper_debug_android_databinding_annotationprocessor_ProcessDataBinding'
  • Kotlin with-statement como expresión
  • AssertionError: el package raíz debe inicializarse
  • Operador nuevo en Kotlin (syntax)
  • Inicio de session automático de Firebase para Android
  • ¿Las funciones en línea de Kotlin son less costosas que las classs anónimas de Java?