5 kotlin
所以我对 Kotlin 编程还是很陌生,在学习教程时,我偶然发现了扩展函数的主题。本教程提供了一个使用扩展函数(比如 tripcon)一次连接三个字符串的示例,如下所示:
fun main() {
val str1="Three "
val str2="concantenated "
var str3="strings."
str3 = str3.tripcon(str1,str2)
println(str3)
}
fun String.tripcon(s1: String, s2: String) : String{
return s1 + s2 + this
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将给出正确的输出
Three concatenated strings.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将 tripcon() 函数修改为:
fun String.tripcon(s1: String, s2: String){
this= s1+s2+this
}
Run Code Online (Sandbox Code Playgroud)
随后将 main() 函数中的倒数第二行修改为:
str3.tripcon(str1,str2)
Run Code Online (Sandbox Code Playgroud)
它会出现一个错误,指出行中的预期变量:
this= s1+s2+this
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,是否有可能在其中修改调用了扩展函数的对象?或者还有其他选择吗?谢谢!
字符串是不可变的。您永远无法在扩展函数内或其他方式修改字符串。
即使可以,您也不会为 分配新值this。 this是您要扩展其行为的对象。然后你就不会修改该对象,而是尝试“替换”它,或者其他什么。坦率地说,我不知道如果 Kotlin 让你这样做会产生什么结果。但事实并非如此。如果 String 不是不可变的,你会想做类似的事情this.setValue(s1 + s2 + this)
str3 = str3.tripcon(str1,str2)之所以有效,tripcon是因为正在构造一个新的 String,然后将该新的 String 分配给引用str3。
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |