如何编写就地扩展功能
How to write in-place extension-function
fun String.reversed():String{
// return another String..no
prob
}
fun String.reverse(){
//in-place change this
}
如何写String.reverse()?
您可以查看 Kotlin 代码库中 MutableList
的就地扩展函数 reverse
是如何实现的:https://github.com/JetBrains/kotlin/blob/1.3.50/libraries/stdlib/js/src/generated/_CollectionsJs.kt#L20
fun <T> MutableList<T>.reverse(): Unit {
val midPoint = (size / 2) - 1
if (midPoint < 0) return
var reverseIndex = lastIndex
for (index in 0..midPoint) {
val tmp = this[index]
this[index] = this[reverseIndex]
this[reverseIndex] = tmp
reverseIndex--
}
}
一般来说,您采用 this
实例并对其调用变异方法来修改其内容。
但是,String
class 是不可变的:它不提供就地修改其内容的方法,因此,您也不能编写就地修改字符串的扩展。
fun String.reversed():String{
// return another String..no
prob
}
fun String.reverse(){
//in-place change this
}
如何写String.reverse()?
您可以查看 Kotlin 代码库中 MutableList
的就地扩展函数 reverse
是如何实现的:https://github.com/JetBrains/kotlin/blob/1.3.50/libraries/stdlib/js/src/generated/_CollectionsJs.kt#L20
fun <T> MutableList<T>.reverse(): Unit {
val midPoint = (size / 2) - 1
if (midPoint < 0) return
var reverseIndex = lastIndex
for (index in 0..midPoint) {
val tmp = this[index]
this[index] = this[reverseIndex]
this[reverseIndex] = tmp
reverseIndex--
}
}
一般来说,您采用 this
实例并对其调用变异方法来修改其内容。
但是,String
class 是不可变的:它不提供就地修改其内容的方法,因此,您也不能编写就地修改字符串的扩展。