我试图将自定义函数作为参数传递。此函数具有自定义结构的唯一参数,并返回相同类型的结构。目标是有一个可以传递的函数,可能有也可能没有输入参数,可能会也可能不会返回值。
pub type MyFunction = fn(Option<&MyStruct>) -> Option<MyStruct>;
pub trait DynamicTrait {
fn typename(&self) -> &str {}
}
#[derive(Copy, Clone, Debug)]
pub struct MyStruct<'a> {
types: Vec<String>,
vars: Vec<Box<DynamicTrait>>,
}
编译时,会出现以下错误。
error[E0106]: missing lifetime specifier
--> src/main.rs:1:55
|
1 | pub type MyFunction = fn(Option<&MyStruct>) -> Option<MyStruct>;
| ^^^^^^^^ expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but the signature does not say which one of argument 1's 2 lifetimes it is borrowed from
我尝试将其更改为:
pub type MyFunction = &Fn<'e>(Option<&MyStruct>) -> Option<MyStruct<'e>>;
哪个失败并出现此错误:
error: expected one of `!`, `::`, or `;`, found `(`
--> src/main.rs:1:30
|
1 | pub type MyFunction = &Fn<'e>(Option<&MyStruct>) -> Option<MyStruct<'e>>;
| ^ expected one of `!`, `::`, or `;` here
对此:
pub type MyFunction = fn<'e>(Option<&MyStruct>) -> Option<MyStruct<'e>>;
这产生了另一个错误:
error: expected `(`, found `<`
--> src/main.rs:1:25
|
1 | pub type MyFunction = fn<'e>(Option<&MyStruct>) -> Option<MyStruct<'e>>;
| ^
我不知道错误是否与管理生命周期或如何定义结构/功能或完全不同的事情有关。
我正在使用Rust 1.23.0。