在我的代码中,我具有以下特征:
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中习惯性地完成这个问题。