将一个string转换为锈的int?

注意:这个问题包含已弃用的1.0之前的代码! 但答案是正确的。

要将一个str转换为Rust中的一个int ,我可以这样做:

 let my_int = from_str::<int>(my_str); 

我知道如何将一个String转换为一个int的唯一方法是获取它的一个片段,然后像这样使用from_str

 let my_int = from_str::<int>(my_string.as_slice()); 

有没有办法直接将String转换为int

您可以使用str::parse::<T>()方法直接转换为int。

 let my_string = "27".to_string(); // `parse()` works with `&str` and `String`! let my_int = my_string.parse::<i32>().unwrap(); 

您可以指定types来parsingturbofish运算符( ::<> ),如上所示或通过显式types注释:

 let my_int: i32 = my_string.parse().unwrap(); 

如注释中所述, parse()返回一个Result 。 如果string不能被parsing为指定的types(例如,string"peter"不能被parsing为i32 ),这个结果将是一个Err

 let my_u8: u8 = "42".parse::<u8>().unwrap(); let my_u32: u32 = "42".parse::<u32>().unwrap(); // or, to be safe, match the `Err` match "foobar".parse::<i32>() { Ok(n) => do_something_with(n), Err(e) => weep_and_moan(), } 

parse返回一个core::result::Result<u32, core::num::ParseIntError>core::result::Result<u32, core::num::ParseIntError> “如果它是Some(v)将值移出Option(v)[or]如果自我值等于None, 。

parse是一个通用的函数 ,因此在尖括号中的types。

最近晚上,你可以这样做:

 let my_int = from_str::<int>(&*my_string); 

这里发生的事情是String现在可以被解引用到str 。 但是,函数需要一个&str ,所以我们不得不再次借用。 作为参考,我认为这种特殊模式( &* )被称为“交叉借用”。

那么,不。 为什么应该有? 如果你不再需要,就丢弃这个string。

当你只需要读取一个string时, &strString更有用,因为它只是一个查看原始数据的视图,而不是它的所有者。 您可以比String更容易地传递它,并且它是可复制的,所以它不会被调用的方法使用。 在这方面,这是更一般的:如果你有一个String ,你可以把它传递到一个&str所期望的地方,但是如果你有&str ,那么你只能把它传递给期望String函数。

你可以find更多关于这两者之间的差异,以及何时在官方string指南中使用它们。