所以我对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
}
上面的代码将给出正确的输出
Three concatenated strings.
但是,如果我将tripcon()函数修改为:
fun String.tripcon(s1: String, s2: String){
this= s1+s2+this
}
然后将main()函数中的倒数第二行修改为:
str3.tripcon(str1,str2)
它在一行中显示一条错误消息,指出期望的变量:
this= s1+s2+this
所以我的问题是,是否可以在内部修改名为扩展功能的对象?还是有其他选择?谢谢!
答案 0 :(得分:2)
字符串是不可变的。您永远无法在扩展函数内部或其他方式修改字符串。
即使可以,也不会为this
分配新值。 this
是您要扩展其行为的对象。然后,您无需修改该对象,而是尝试“替换”它或其他东西。坦率地说,我不知道如果Kotlin允许您这样做会导致什么。但事实并非如此。如果String并非一成不变,则您想要执行类似this.setValue(s1 + s2 + this)
str3 = str3.tripcon(str1,str2)
之所以有效,是因为tripcon
正在构造一个新的String,然后您将该新String分配给引用str3
。