如何为返回具有两个生命周期的结构的函数创建类型别名?

时间:2018-03-02 21:53:30

标签: function types rust lifetime

我试图将自定义函数作为参数传递。此函数具有自定义结构的唯一参数,并返回相同类型的结构。目标是有一个可以传递的函数,可能有也可能没有输入参数,可能会也可能不会返回值。

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。

0 个答案:

没有答案