Kotlin-扩展Kotlin字符串类的问题

7cwmlq89  于 2022-12-13  发布在  Kotlin
关注(0)|答案(2)|浏览(173)

我目前正在尝试使用文件StringExt.kt中的方法扩展Kotlins String类

fun String.removeNonAlphanumeric(s: String) = s.replace([^a-ZA-Z0-9].Regex(), "")

但是Kotlin在不允许我在lambda中使用这个方法:

s.split("\\s+".Regex())
.map(String::removeNonAlphanumeric)
.toList()

错误为:

Required: (TypeVariable(T)) -> TypeVariable(R)
Found: KFunction2<String,String,String>

让我困惑的是KotlinsStrings.kt有非常相似的方法,我可以通过引用调用它们,而不用Intellij提出这种问题。

42fyovps

42fyovps1#

这是因为您声明了一个扩展函数,该函数接受一个附加参数,并且应该用作s.replace("abc")
我想你的意思是:

fun String.removeNonAlphanumeric(): String = this.replace("[^a-ZA-Z0-9]".toRegex(), "")

此声明没有额外的参数,并使用this来引用调用它的String示例。

zfciruhq

zfciruhq2#

我认为这是因为lambda是一个匿名函数,不能访问扩展文件的作用域。
检查这个链接也许包含一些有用的信息:https://kotlinlang.org/docs/reference/extensions.html

相关问题