繁体   English   中英

Rust 特征返回类型(结果)

[英]Rust trait return type (Result)

此 function 通过解析定义线段的字符串来创建线段。

由于除了线段之外还有一个要解析的项目,所以我尝试使用一个特征。

我像下面这样实现它。

pub trait GeomParser<T> {
    fn parse(str_line: &str) -> Result<T, std::num::ParseFloatError>;
}

impl GeomParser<Segment> for Segment {
    fn parse(str_line: &str) -> Result<Segment, std::num::ParseFloatError> {
        let mut strs_iter = str_line.split_ascii_whitespace();

        strs_iter.next(); // L
        let start_x : f64 = strs_iter.next().unwrap().parse()?;
        let start_y : f64 = strs_iter.next().unwrap().parse()?;
        let end_x : f64 = strs_iter.next().unwrap().parse()?;
        let end_y : f64 = strs_iter.next().unwrap().parse()?;
        let width : f64 = strs_iter.next().unwrap().parse()?;

        let seg = Segment
        {
            start : Point { x: start_x, y: start_y },
            end : Point { x: end_x, y: end_y },
            width : width,
        };

        Ok(seg)
    }
}

我可以避免在特征中使用 generics 吗?

我想指定你实现的结构的类型作为返回类型?

pub trait GeomParser {
    fn parse(str_line: &str) -> Result<????, std::num::ParseFloatError>;
}

impl GeomParser for Segment {
    fn parse(str_line: &str) -> Result<Segment, std::num::ParseFloatError> {

...

}

您正在寻找Self

pub trait GeomParser: Sized {
    fn parse(str_line: &str) -> Result<Self, std::num::ParseFloatError>;
}

它是实现特征的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM