Generics 解析数字的通用函数失败,返回“0”;未实施FromStr”命令;
我的代码中有一个通用函数:Generics 解析数字的通用函数失败,返回“0”;未实施FromStr”命令;,generics,rust,Generics,Rust,我的代码中有一个通用函数: fn test<T>(text: &str) -> T { text.parse::<T>() } 我昨天才开始学习Rust,所以这可能是一个我没有找到答案的非常基本的问题。当您声明泛型类型参数T时,您对该类型一无所知。它可以是i32,String,()或PinkElephant;一个字符串只能解析其中的两个 Rust中限制类型的方法是通过特征边界:我们显式地请求类型的特定行为。比如“此类型可以是任何类型,但我至少希望能
fn test<T>(text: &str) -> T {
text.parse::<T>()
}
我昨天才开始学习Rust,所以这可能是一个我没有找到答案的非常基本的问题。当您声明泛型类型参数
T
时,您对该类型一无所知。它可以是i32
,String
,()
或PinkElephant
;一个字符串只能解析其中的两个
Rust中限制类型的方法是通过特征边界:我们显式地请求类型的特定行为。比如“此类型可以是任何类型,但我至少希望能够克隆此类型的一个实例”(这将是clone
trait)。你可以(也应该!)阅读更多关于特质的话题
那么,您希望您的类型T
具有什么特性呢?您希望通过使用从字符串创建T
的实例。parse()
的函数签名是:
fn parse<F>(&self) -> Result<F, F::Err>
where F: FromStr
fn parse<F>(&self) -> Result<F, F::Err> where F: FromStr
你问的这个expect()
是什么?好。。。这里我们讨论的是另一个主题:错误处理。还有一个,你应该读一下。简而言之:您需要以某种方式处理字符串无效的情况(例如,当您试图解析整数时,“peter”
)expect()
在这里可能是错误的:当解析没有成功时,它只是恐慌(中止线程)
还请记住,有一个编译器错误索引,您可以在其中阅读有关特定错误的更多信息。对于错误E0277。与错误消息状态类似,
T
需要实现core::str::FromStr
,以便适用于parse
函数。parse
的类型签名为:
fn parse<F>(&self) -> Result<F, F::Err>
where F: FromStr
fn parse<F>(&self) -> Result<F, F::Err> where F: FromStr
Ok(2313)
你看过报纸了吗?它解释了基本原理,应该可以帮助您解决问题。
fn parse<F>(&self) -> Result<F, F::Err> where F: FromStr
use std::str::FromStr;
fn test<T: FromStr>(text: &str) -> Result<T, T::Err> {
text.parse::<T>()
}
fn main() {
println!("{:?}", test::<u64>("2313"));
}