Kotlin方法引用代替lambda

卢克

考虑以下代码,我们在其中获取列表的大块,将它们加入并打印到stdout:

val l = listOf("1", "2", "3", "4", "5", "6", "7")
l.chunked(3, { a -> a.joinToString()}).forEach(::println)

该代码可以正常工作。我想将lambda调用({ a -> a.joinToString()})更改为方法引用,如下所示:

l.chunked(3, l::joinToString).forEach(::println)

使用方法引用的代码无法编译,给出的错误是:

错误:(4,7)Kotlin:类型推断失败:fun Iterable.chunked(大小:Int,转换:(列表)-> R):列表无法应用于接收者:列表参数:(Int,KFunction6 <@ParameterName CharSequence ,@ParameterName CharSequence,@ParameterName CharSequence,@ParameterName Int,@ParameterName CharSequence,@ParameterName(name =“ transform”)(((String)-> CharSequence)?, String>)

错误:(4,18)Kotlin:类型不匹配:推断的类型为KFunction6 <@ParameterName CharSequence,@ParameterName CharSequence,@ParameterName CharSequence,@ParameterName Int,@ParameterName CharSequence,@ParameterName(name =“ transform”)((String) -> CharSequence)?,字符串>但是(List)-> ??? 被期待

错误:(4,21)Kotlin:类型推断失败:fun Iterable.joinToString(分隔符:CharSequence = ...,前缀:CharSequence = ...,后缀:CharSequence = ...,限制:Int = ...,截断:CharSequence = ...,转换:((T)-> CharSequence)?= ...):字符串无法应用于接收方:列表参数:()

有没有一种方法可以使用方法引用而不是lambda调用来编译代码?我开始学习Kotlin,但是假设错误源于joinToString使用许多默认参数的事实吗?

麦可

Kotlin问题跟踪器中一个打开的功能请求,标题为“支持将默认值作为其他函数类型的函数引用”,这似乎是您的用例无法使用的。

该功能当前的目标版本为1.3。

更新1.3 Kotlin发行版不包含此功能,目标版本更新为1.4

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章