Rust 时我该如何做? [已关闭]

问题描述 投票:0回答:1

此问题已被删除。

rust design-patterns
1个回答
1
投票

实现此目的的一种方法是创建一个

Cpu<State>
,然后为每个状态创建一个结构体来承载所有特定于状态的数据,并为每个状态编写一个
impl
以提供转换到下一个状态的方法。

struct Cpu<State> {
    data: Vec<u16>,
    state: State,
}


struct State1 {
    foo: String
}

struct State2 {
    bar: usize
}

impl Cpu<State1> {
    fn transition(self) -> Cpu<State2> {
        let Self { data, state: State1 { foo } }  = self;
        let bar = foo.len();
        Cpu { data, state: State2 { bar } }
    }
}

您基本上已经在类型系统中编码了枚举变体。状态之间的有效转换作为方法公开,无效的转换无法表示。

© www.soinside.com 2019 - 2024. All rights reserved.