如何定义返回其自己类型的Rust函数类型?

时间:2016-08-24 18:11:39

标签: generics rust

我正在学习Rust,并且仍然非常想要了解它。请考虑以下Go定义:

type FnType func(paramType) FnType

它只是一个返回相同类型函数的函数。可以在Rust中实现类似的东西吗?理想情况下,它可以一般地完成,以便客户指定paramType吗?

2 个答案:

答案 0 :(得分:5)

我在文档中做了一些挖掘并带到了操场上,我想我自己能够回答这个问题,虽然它确实需要一个中间类型:enum,具体而言。

fn main() {
    let mut state = State::Some(first);
    while let State::Some(s) = state {
        state = s(0)
    }
}

enum State<T> {
    Some(fn(T) -> State<T>),
    None,
}

fn first(_: i32) -> State<i32> {
    println!("First");
    State::Some(second)
}

fn second(_: i32) -> State<i32> {
    println!("Second");
    State::None
}

您可以验证它是否在playground上运行。

答案 1 :(得分:3)

Rust中不支持循环类型:

type a = fn(String) -> a;

产生以下错误:

error: unsupported cyclic reference between types/traits detected [--explain E0391]
 --> <anon>:1:24
  |>
1 |> type a = fn(String) -> a;
  |>                        ^
note: the cycle begins when processing `a`...
note: ...which then again requires processing `a`, completing the cycle.

playground