小编Ver*_*gil的帖子

可以在枚举类型上使用特征吗?

我通读了trait文档,发现了在结构上使用trait的简洁定义。是否可以在enum类型上使用特征?我已经看到回答说“不”的答案,但是他们已经3岁了,还没有完全按照我的意愿去做。

我试图这样做:

#[derive(Debug, Copy, Clone)]
pub enum SceneType {
    Cutscene,
    Game,
    Menu,
    Pause,
    Credits,
    Exit,
}

//We want to guarantee every SceneType can be played statically
trait Playable {
    fn play();
}

impl Playable for SceneType::Cutscene {
    fn play() {}
}
Run Code Online (Sandbox Code Playgroud)
#[derive(Debug, Copy, Clone)]
pub enum SceneType {
    Cutscene,
    Game,
    Menu,
    Pause,
    Credits,
    Exit,
}

//We want to guarantee every SceneType can be played statically
trait Playable {
    fn play();
}

impl Playable for SceneType::Cutscene { …
Run Code Online (Sandbox Code Playgroud)

enums traits rust

6
推荐指数
2
解决办法
3122
查看次数

如何确保我的功能将获得有效长度的Vec?

是否可以指定函数的Vec参数具有一定的长度?考虑骰子的可能值:

fn new(d_type: DiceType, face_vals: /*Vec<u32> with len() == 2/4/6/8/10/12/20*/) -> Dice {...}
Run Code Online (Sandbox Code Playgroud)

我正在写一些东西,可以让你创建一个具有指定面值的多面体骰子(通常的RPG大小:2,4,6等).我记得当你在没有unsafe关键字的情况下调用Rust函数时,用户应该可以调用它,但是他们喜欢而不用担心失败,因此只需检查函数的有效性并返回一些"搞砸了"错误就是Rust.

我怎样才能做到这一点?

这是我正在处理的代码的一部分:

pub enum DiceType {
    D2,
    D4,
    D6,
    D8,
    D10,
    D10P,
    D12,
    D20,
}

pub struct Dice {
    dice_type: DiceType,
    face_count: usize,
    face_values: Vec<u32>,
}

impl Dice {
    pub fn new(d_type: DiceType, face_vals: Vec<u32>) -> Dice {
        let mut retval;

        //Reject if not a valid dice type 2, 4, 6, 8, 10, 12, or 20
        //I really shouldn't be …
Run Code Online (Sandbox Code Playgroud)

rust

1
推荐指数
1
解决办法
117
查看次数

标签 统计

rust ×2

enums ×1

traits ×1