Kotlin传递函数引用至Array构造器出现类型不匹配错误的原因
为什么传递函数引用给Array构造器会出现类型不匹配?
嘿,别担心,这真的是Kotlin新手很容易踩的小坑,我来给你掰扯清楚~
首先先给你吃个定心丸:你的square函数类型(Int) -> Int,和Array<Int>构造器要求的init参数类型是完全匹配的——构造器的第二个参数就是需要一个接收索引(Int类型)、返回对应元素(这里是Int)的函数。那问题出在哪呢?
答案很简单:你传递函数的方式错了!
在Kotlin里,如果你想把一个已定义的函数作为引用传递给高阶函数(比如Array的构造器),必须用::操作符来获取这个函数的引用。你直接写square的时候,编译器会误以为你是想调用这个函数,但square需要一个Int参数,这里你没传,自然就会抛出类型不匹配的错误——毕竟构造器要的是一个函数对象,而你给的是一个未完成的函数调用(连参数都没填)。
修正后的代码应该是这样:
fun square(arg : Int) : Int{ return arg * arg } fun main() { val arr: Array<Int> = Array(5, ::square) // 如果你觉得写函数引用麻烦,也可以直接用lambda表达式,更简洁: // val arr = Array(5) { it * it } }
这样一来,::square就把你的square函数转换成了符合构造器要求的函数类型对象,编译器就不会报错啦。
内容的提问来源于stack exchange,提问作者Goktug
相关产品推荐
相关产品推荐

