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

时间:2017-07-11 01:04:13

标签: android 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();
    }

}

2 个答案:

答案 0 :(得分:2)

您的Kotlin语法错误。

如何编写,BB方法将是:

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

你传递BB的是AA功能的结果(又名:Int)。

换句话说,如果您在调用“BB”时已经调用了该函数,为什么在(BB)内部接收函数(AA)。由于AA采用Int并返回Int,因此BB函数的签名只需要两个整数。致AA(Int)的电话发生在ERROR 2行。

目前还不清楚你要做什么(考虑到Toast的代码),但你可以使用TypeAlias&这样的绑定引用:

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

答案 1 :(得分:0)

试试这个。

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