当我在Kotlin中使用函数作为参数时,出现“类型不匹配”错误?

我希望在下面的代码中使用函数AA作为函数BB的参数,但是我得到了这两个错误。

错误1:我希望将函数cc的结果分配给dd,但是我失败了。

错误2:我希望调用函数BB,但参数AA(3)不正确。

我该如何解决这些错误? 谢谢!

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(); } } 

你的Kotlin语法是错误的。

如何编写,BB方法将是:

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

你传递的是BB函数的结果 (又名:一个Int )。

换句话说,如果您在调用“BB”时已经调用了函数,那么为什么您会收到函数(AA)(BB)? 由于AA采用一个Int并返回一个Int,所以BB函数的签名只需要两个整数。 AA(Int)的呼叫发生在您的ERROR 2行。

目前还不清楚你想要做什么(给出你的Toast的代码),但是你可以使用TypeAlias&Bound引用:

 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() } } 

尝试这个。

 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() }