我通读了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) 是否可以指定函数的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)