Rust 切片中的不可变引用是如何更新的?为什么';是否更改引用的变量';s值多少?
我正在查阅我读到的锈迹文件。根据页面的文本,切片是不可变的引用: 这也是字符串文本不可变的原因&str是一个不可变的引用 我希望在下面的代码中有两件事:Rust 切片中的不可变引用是如何更新的?为什么';是否更改引用的变量';s值多少?,rust,slice,Rust,Slice,我正在查阅我读到的锈迹文件。根据页面的文本,切片是不可变的引用: 这也是字符串文本不可变的原因&str是一个不可变的引用 我希望在下面的代码中有两件事: yetnewstring=“we”以给出编译时错误 即使我在上述问题上错了,我仍然希望newstring2的最后一次打印语句的输出是westtheSlice 下面的代码是如何工作的 fn main(){ 让mut newstring2:String;//声明新的可变字符串 newstring2=String::from(“Hello”);/
yetnewstring=“we”代码>以给出编译时错误
- 即使我在上述问题上错了,我仍然希望
的最后一次打印语句的输出是newstring2
westtheSlice
fn main(){
让mut newstring2:String;//声明新的可变字符串
newstring2=String::from(“Hello”);//为其添加一个值
println!(“这是新的新闻字符串:{}”,新闻字符串2);//output=Hello
让mut-yetnewstring=test123(&mut-newstring2);//传递newstring2的可变引用,并获取字符串文本
println!(“这是yetnewstring:{}”,yetnewstring);//output=“te”
yetnewstring=“we”//为什么现在是可变的?字符串文本不是不可变的吗?
println!(“这是已更改的yetnewstring:{}”,yetnewstring);//output=“we”
println!(“这是更改yetnewstring='we':{},newstring2之后的newstring2);//output=“testtheSlice”
//如果字符串literal yetnewstring是对newstring2片段的引用,
//那么上面的输出必须是:“westtheSlice”
}
fn test123(s:&mut字符串)->&str{
*s=String::from(“testtheSlice”);
&s[0..2]
}
yetnewstring
的类型是&str
,只有绑定是可变的。赋值是有效的,因为您正在将另一个&str
值赋值给一个&str
变量,这很好。yetnewstring
的类型是&str
,只有绑定是可变的。赋值是有效的,因为您正在将另一个&str
值赋值给一个&str
变量,这很好。如果绑定是可变的,这意味着在这种情况下编辑引擎盖下的newstring2
的值?那么最后一个打印语句不应该输出“westtheSlice”?它不是在修改新闻字符串2
。您正在修改yetnewstring
以引用字符串文字,而不是newstring2
的一部分。换句话说,您正在更改newstring2
所指向的内容,而不是其值。如果绑定是可变的,那么在这种情况下,这意味着它将在引擎盖下编辑newstring2
的值?那么最后一个打印语句不应该输出“westtheSlice”?它不是在修改新闻字符串2
。您正在修改yetnewstring
以引用字符串文字,而不是newstring2
的一部分。换言之,你正在改变newstring2
所指的内容,而不是它的价值。谢谢,帖子中的答案非常具有信息性。是的,*s=String::from(“testtheSlice”)
cahnges:“您好”到“testtheSlice”。但我对代码的其余部分感到困惑。yetnewstring=test123(&mut-newstring2)的性能如何代码>来自newstring2
的收入值?另外,如果yetnewstring
是引用&str
类型的可变变量,是否意味着它可以更改其引用的&str
所持有的值?如果是的话,为什么在我们将yetnewstring
的值更新为“we”之后,dintnewstring2
的值在这种情况下会发生变化?除此之外,&str
不是字符串文字。字符串文字是&str
(&static str
),但是有很多方法可以创建&str
,除此之外,它只是对某个地方的字符串数据的非所有权引用。“另外,如果yetnewstring是一个引用&str类型的可变变量,这是否意味着它可以更改其引用的&str所持有的值?”不,您可以将其引用的内容更改为其他内容,但不能更改其引用的内容在我们将yetnewstring的值更新为“we”之后,为什么dint NewString 2的值会在这种情况下发生变化?因为您刚刚更改了yetnewstring
指向的内容。NewString 2
独立指向同一个位置,但您没有(也不能)指向该位置改变观点。这样想:哈罗德和库马尔都有一辆车。这是同一辆车,他们共用。库马尔得到了一辆新车,库马尔的车与以前不同,但是库马尔改变了,而不是车本身,所以哈罗德和他们的(现在是独家的)car不受影响。谢谢,帖子中的答案是非常不真实的。所以是的,*s=String::from(“testtheSlice”);
cahnges:“你好”到“testtheSlice”。但是我对代码的其余部分感到困惑。yetnewstring=test123(&mut newstring2)怎么样
newstring2中的takings值?如果yetnewstring
是一个引用&str
类型的可变变量,这是否意味着它可以更改其引用的&str
所持有的值?如果是,为什么在更新的值后,dintnewstring2
的值会发生变化yetnewstring
到“we”?除此之外,&str
不是字符串文字。字符串文字是&str
(&static str
),但有很多方法可以创建&str
,除此之外,它只是对某个地方的字符串数据的非所有权引用。”另外,如果yetnewstring是一个引用&str类型的可变变量,是否意味着它可以更改其引用的&str所持有的值?“不,您可以将其引用的内容更改为其他内容,但不能更改其引用的内容。”在我们将yetnewstring的值更新为“we”?之后,为什么dint NewString的值在这种情况下会发生变化