【发布时间】:2022-08-22 00:29:11
【问题描述】:
我希望以下 Rust 代码能够工作
struct Expression<\'a> {
s: &\'a str,
}
impl<\'a> Expression<\'a> {
fn foo(e: Expression<\'a>, _: Expression<\'a>) -> Expression<\'a> {
e
}
}
fn accept(_: for<\'a> fn(Expression<\'a>, Expression<\'a>) -> Expression<\'a>) {
}
fn main() {
accept(Expression::foo)
}
但我收到一条错误消息:
error[E0308]: mismatched types
--> src/main.rs:16:12
|
16 | accept(Expression::foo)
| ^^^^^^^^^^^^^^^ one type is more general than the other
|
= note: expected fn pointer `for<\'a> fn(Expression<\'a>, Expression<\'a>) -> Expression<\'a>`
found fn pointer `fn(Expression<\'_>, Expression<\'_>) -> Expression<\'_>`
For more information about this error, try `rustc --explain E0308`.
可以通过引入另一个生命周期来修复错误\'b
impl<\'a> Expression<\'a> {
fn foo<\'b>(e: Expression<\'b>, _: Expression<\'b>) -> Expression<\'b> {
e
}
}
有人可以向我解释为什么这是必要的吗? \'a 不是已经通用了吗?