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 lanzar Int to Char en Kotlin
  • Forma correcta de get properties con la configuration de Kotlin-script para Gradle
  • Diferencia entre el método takeWhile () y filter () en Kotlin
  • ¿Cómo puedo filtrar un valor de una list de arrays en Kotlin?
  • Kotlin agrega escucha personalizada para hacer clic en widgets en Android
  • Argumento de tipo explícito Kotlin y RxJava
  • Tipo de function de Kotlin en su lugar interfaz funcional lambda
  • Agregar idioma al keyboard sin abrir la configuration
  • Funciones de la delegación de la class Kotlin
  • Kotlin: ¿Puede una súper class abstracta tener un constructor abstracto?
  • ¿Por qué mi editor deslizante no funciona en la cuadrícula Vaadin 8?