相关疑难解决方法(0)

如何使包含枚举泛型的结构优于枚举变体?

请看一下代码:

struct Human {
  name: String,
  profession: Profession,
}

enum Profession {
  Doctor,
  Teacher
}

struct Family {
  family_doctor: // How to express type that will mean Human (because name matters) of profession Doctor?
}

Run Code Online (Sandbox Code Playgroud)

是否可以通过以Human某种方式进行泛型并将变体作为字段Doctor的类型参数传递来做到这一点?profession如果没有,那么您建议的这种关系最接近的解决方法是什么?

请注意,这个问题可能看起来与旧问题重复。但首先,Rust 不断发展,其次,我要求一种解决方法。

types rust

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

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

我通读了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
查看次数

如何传递枚举变量以匹配作为函数参数?

我想将需要匹配的枚举的参数传递给参数,如下所示:

enum D {
    A(i64),
    B(u64),
    C(u64, u64),
}
Run Code Online (Sandbox Code Playgroud)
let a = D.A(10);
println!(a.is_of(D.A)); // true
println!(a.is_of(D.B)); // false
Run Code Online (Sandbox Code Playgroud)

我知道我可以为此使用匹配规则,但是is_of出于我的目的,我希望此方法作为枚举选项的输入。

enums matching rust

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

避免“enum”中的变体名称和类型重复

我发现自己经常定义enum如下类型:

struct Foo { }
struct Bar { }
struct Baz { }

enum MyEnum {
    Foo(Foo),
    Bar(Bar),
    Baz(Baz),
}
Run Code Online (Sandbox Code Playgroud)

我发现重复的内容Foo(Foo)不雅且多余。它还使初始化变得多余:

let example = MyEnum::Foo(Foo{ /* ... */ });
Run Code Online (Sandbox Code Playgroud)

我想编写类似以下伪代码的内容:

struct Foo { }
struct Bar { }
struct Baz { }

type_enum MyEnum {
    Foo,
    Bar,
    Baz,
}

let example = MyEnum::Foo{ /* ...anything that `Foo` supports ... */ };
Run Code Online (Sandbox Code Playgroud)

std::variant上面的内容与C++17 中的非常相似。Rust 支持类似的东西吗?

enums rust

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

标签 统计

rust ×4

enums ×3

matching ×1

traits ×1

types ×1