提问人: 提问时间:12/6/2022 更新时间:12/6/2022 访问量:87
Kotlin - 扩展 Kotlin 字符串类的问题
Kotlin - Issue Extending Kotlin String Class
问:
我目前正在尝试使用文件 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 提出此类问题。任何建议都是值得赞赏的。
答:
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(), "")
此声明没有额外的参数,用于引用调用它的实例。this
String
评论
0赞
12/6/2022
谢谢!这是绝对正确的:)按如下方式调用它也可以: fun String.removeNonAlphanumeric() = replace(“[^a-ZA-Z0-9]”.toRegex(), “”)
评论