具有函数返回特征的Rust特征继承问题

时间:2019-07-10 14:30:13

标签: inheritance rust traits

在我的代码中,我具有以下特征:

endswith

然后我有一个返回pub trait ParseTree {} pub trait CharMatchable: ParseTree {} pub struct Character {} impl CharMatchable for Character {} impl ParseTree for Character {} impl Character { fn new() -> Self { Self {} } } pub struct TreePart {} impl ParseTree for TreePart {} impl TreePart { fn new() -> Self { Self {} } } 的函数和另一个返回Box<CharMatchable>的函数:

Box<ParseTree>

这在Rust中不起作用,因为当我编译代码时出现以下错误:

fn returns_char_matchable() -> Box<CharMatchable> {
    Box::new(Character::new())
}

fn returns_parse_tree(p: bool) -> Box<ParseTree> {
    if p {
        returns_char_matchable() // <-- Here is the error
    } else {
        Box::new(TreePart::new())
    }
}

正如评论中提到的那样,这可能不是在Rust中实现这种行为的惯用方式。我特别在问一个人如何以惯用的方式实现这样的事情。

这个问题与this one不同,因为我不是在问为什么这不起作用,而是在Rust中习惯性地完成这个问题。

0 个答案:

没有答案