Rust 关于锈蚀静态寿命和范围的问题
我最近在学习生锈,但在一生中停止。有人能帮我吗? 我试图使用静态生存期生成字符串文字,但当它超出范围时,引用 不能再使用了Rust 关于锈蚀静态寿命和范围的问题,rust,static,lifetime,Rust,Static,Lifetime,我最近在学习生锈,但在一生中停止。有人能帮我吗? 我试图使用静态生存期生成字符串文字,但当它超出范围时,引用 不能再使用了 fn main(){ { let s: &'static str = "hello world"; } println("s={}",s); } 我得到一个错误:在此范围内找不到 我正在尝试使用静态关键字 fn main(){ { static s: &'static str = "hel
fn main(){
{
let s: &'static str = "hello world";
}
println("s={}",s);
}
我得到一个错误:在此范围内找不到
我正在尝试使用静态关键字
fn main(){
{
static s: &'static str = "hello world";
}
println("s={}",s);
}
还是一样。
静态关键字、静态生存期和范围之间有什么区别吗?
谢谢 范围与生存期不是一回事。在大多数情况下,它们是相似的:
fn main(){
{//scope在这里以“{”开头
让foo=foo::new();//在作用域内创建一个新变量
}//作用域在此结束。作用域内所有的值都被释放。
//福在这里是不可接近的
}
即使变量的生存期大于封闭范围,也不意味着您可以在范围之外访问它。相反,生存期只是告诉您某个变量的有效期
考虑这一点的一种方法是,所有变量都是拥有的。甚至是引用。您可以想象,持有某个引用的变量拥有该引用(而不是实际值本身)。当持有该引用的变量超出范围时,“拥有的”引用也会被删除,但实际值不会被删除
在您的示例中,s
拥有对str
的引用。当s
超出范围时,将删除引用,但不会删除它所指向的实际str
本身(这是的静态
,因此在程序终止之前不会删除它)
由于引用已删除,您将无法再访问它
在您的示例中,只需将s
的声明置于与您将使用它的位置相同或更大的范围内。由于str
是静态的且是常量,因此您可以创建一个全局变量:
static s:&str=“Hello World!”;//注意,“static”是隐式的
范围与生存期不是一回事。在大多数情况下,它们是相似的:
fn main(){
{//scope在这里以“{”开头
让foo=foo::new();//在作用域内创建一个新变量
}//作用域在此结束。作用域内所有的值都被释放。
//福在这里是不可接近的
}
即使变量的生存期大于封闭范围,也不意味着您可以在范围之外访问它。相反,生存期只是告诉您某个变量的有效期
考虑这一点的一种方法是,所有变量都是拥有的。甚至是引用。您可以想象,持有某个引用的变量拥有该引用(而不是实际值本身)。当持有该引用的变量超出范围时,“拥有的”引用也会被删除,但实际值不会被删除
在您的示例中,s
拥有对str
的引用。当s
超出范围时,将删除引用,但不会删除它所指向的实际str
本身(这是的静态
,因此在程序终止之前不会删除它)
由于引用已删除,您将无法再访问它
在您的示例中,只需将s
的声明置于与您将使用它的位置相同或更大的范围内。由于str
是静态的且是常量,因此您可以创建一个全局变量:
static s:&str=“Hello World!”;//注意,“static”是隐式的