我希望在下面的代码中使用函数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();
}
}
答案 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()
}