【发布时间】:2022-09-26 14:21:30
【问题描述】:
生锈的初学者。看了4.3章后,我对4.3章的内容感到困惑,它与原理有交叉引用
在任何给定时间,您都可以拥有一个可变引用或任意数量的不可变引用。
简化的例子是
fn main() { let mut str: String = String::from(\"hello\"); let slice: &str = &str[0..2]; // #1 str.clear(); // #2 println!(\"{}\", slice); }此示例在编译时会导致恐慌错误。教程注释说原因是它违反了上面的原则。但是,我无法理解。在我看来,
#1创建了一个类型为不可变的引用&str, 相反,#2使用类型创建可变引用&细绳,根据类型,它们似乎不是指相同的东西,因为它们具有不同的引用类型。为什么它违反了上面似乎只适用于相同类型的引用的原则?有什么原则可以澄清这个问题吗?
-
&str是一个切片,它可以是指向String内部区域的指针。它们共享内存,因此您无法修改String -
@mousetail 有没有这样明确解释的原则?也就是说,不能同时存在可变引用和不可变引用的确切含义是什么?
-
@ChayimFriedman 我认为它们是不同的问题。在这个问题中,我尝试询问两种不同的引用类型是否会违反问题中引用的原则。
-
\"为什么它违反了上面似乎只适用于相同类型的引用的原则?\"- 无论引用的类型如何,借用规则都适用,仅适用于它来自事务的地方。您可以从
Person借用名称&str,并且在您借用它时,您不能修改该人。
标签: rust