Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 切片中的不可变引用是如何更新的?为什么';是否更改引用的变量';s值多少?_Rust_Slice - Fatal编程技术网

Rust 切片中的不可变引用是如何更新的?为什么';是否更改引用的变量';s值多少?

Rust 切片中的不可变引用是如何更新的?为什么';是否更改引用的变量';s值多少?,rust,slice,Rust,Slice,我正在查阅我读到的锈迹文件。根据页面的文本,切片是不可变的引用: 这也是字符串文本不可变的原因&str是一个不可变的引用 我希望在下面的代码中有两件事: yetnewstring=“we”以给出编译时错误 即使我在上述问题上错了,我仍然希望newstring2的最后一次打印语句的输出是westtheSlice 下面的代码是如何工作的 fn main(){ 让mut newstring2:String;//声明新的可变字符串 newstring2=String::from(“Hello”);/

我正在查阅我读到的锈迹文件。根据页面的文本,切片是不可变的引用:

这也是字符串文本不可变的原因&str是一个不可变的引用

我希望在下面的代码中有两件事:

  • 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”之后,dint
newstring2
的值在这种情况下会发生变化?除此之外,
&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
所持有的值?如果是,为什么在更新
的值后,dint
newstring2
的值会发生变化yetnewstring
到“we”?除此之外,
&str
不是字符串文字。字符串文字是
&str
&static str
),但有很多方法可以创建
&str
,除此之外,它只是对某个地方的字符串数据的非所有权引用。”另外,如果yetnewstring是一个引用&str类型的可变变量,是否意味着它可以更改其引用的&str所持有的值?“不,您可以将其引用的内容更改为其他内容,但不能更改其引用的内容。”在我们将yetnewstring的值更新为“we”?之后,为什么dint NewString的值在这种情况下会发生变化