Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
为什么字符串::from(&;str)和&;str.to_string()在锈蚀中的表现不同?_String_Rust - Fatal编程技术网

为什么字符串::from(&;str)和&;str.to_string()在锈蚀中的表现不同?

为什么字符串::from(&;str)和&;str.to_string()在锈蚀中的表现不同?,string,rust,String,Rust,这里发生了什么?请解释。这里的主要问题是&的优先级低于方法调用 所以,实际代码是 let mut slice=&(字符串[5..12]。to_string()); 因此,您需要引用已删除且以后无法使用的临时字符串对象。您应该将引用括在括号中,并对结果调用该方法 fn main() { let string = "Rust Programming".to_string(); let mut slice = &string[5..12].to_string(

这里发生了什么?请解释。

这里的主要问题是
&
的优先级低于方法调用

所以,实际代码是

let mut slice=&(字符串[5..12]。to_string());

因此,您需要引用已删除且以后无法使用的临时字符串对象。

您应该将引用括在括号中,并对结果调用该方法

fn main() {
   let string = "Rust Programming".to_string();
   let mut slice = &string[5..12].to_string();       // Doesn't work...why?
   let mut slice = string[5..12].to_string();        // works
   let mut slice2 = String::from(&string[5..12]);    // Works

   slice.push('p');
   println!("slice: {}, slice2: {}, string: {}", slice,slice2,string);
}
fn main() {
   let string = "Rust Programming".to_string();
   let mut slice = (&string[5..12]).to_string();     // ! -- this should work -- !
   let mut slice = string[5..12].to_string();        // works
   let mut slice2 = String::from(&string[5..12]);    // Works

   slice.push('p');
   println!("slice: {}, slice2: {}, string: {}", slice,slice2,string);
}