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

Kotlin - Issue Extending Kotlin String Class

提问人: 提问时间:12/6/2022 更新时间:12/6/2022 访问量:87

问:

我目前正在尝试使用文件 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>   

让我感到困惑的是,Kotlins Strings.kt 有非常相似的方法和 我可以引用它们,而不会引起 Intellij 提出此类问题。任何建议都是值得赞赏的。

Android 字符串 Kotlin 方法 扩展

评论


答:

0赞 hassan bazai 12/6/2022 #1

我认为这是因为 lambda 是一个匿名函数,并且不能访问扩展文件的范围。

检查此链接可能包含一些有用的信息: https://kotlinlang.org/docs/reference/extensions.html

2赞 Ivan Gromov 12/6/2022 #2

这是因为您已经声明了一个接受附加参数的扩展函数,并且应该用作 。s.replace("abc")

我想你的意思如下:

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

此声明没有额外的参数,用于引用调用它的实例。thisString

评论

0赞 12/6/2022
谢谢!这是绝对正确的:)按如下方式调用它也可以: fun String.removeNonAlphanumeric() = replace(“[^a-ZA-Z0-9]”.toRegex(), “”)