相关疑难解决方法(0)

类似结构的枚举可以用作类型吗?

考虑以下(非法)示例:

enum Foo {
    Bar { i: i32 },
    Baz,
}

struct MyStruct {
    field: Foo::Bar,
}
Run Code Online (Sandbox Code Playgroud)

Foo::Bar是一个类似结构的变体.我发现它们非常有用.但是,我有一个实例,我需要在另一个结构中存储结构的实例,如上面的示例MyStruct.改变MyStruct::field是一个Foo将是无效的,因为它没有为外地意义是一个Foo::Baz.它只是一个实例Foo::Bar.

rustc 告诉我上面的代码无效:

error: found value name used as a type: DefVariant(DefId { krate: 0u32, node: 4u32 }, DefId { krate: 0u32, node: 5u32 }, true)
Run Code Online (Sandbox Code Playgroud)

我只是做错了什么,或者这是不可能的?如果不可能,有没有计划呢?

我知道我可以像这样解决它,但我认为它是一个劣等选项,如果可能的话,我想避免它:

struct Bar {
    i: i32,
}

enum Foo {
    Bar(Bar),
    Baz,
}

struct MyStruct {
    field: Bar,
}
Run Code Online (Sandbox Code Playgroud)

enums rust

4
推荐指数
2
解决办法
873
查看次数

有没有办法将现有结构用作枚举变量?

我正在使用一个用于多态的枚举,类似于以下内容:

enum MyType {
    Variant1 { a: i32, b: i32 },
    Variant2 { a: bool, b: bool },
}
Run Code Online (Sandbox Code Playgroud)

是否有干净的方法将现有结构用于Variant1Variant2?我已经完成以下工作:

struct Variant1 {
    a: i32,
    b: i32,
}

struct Variant2 {
    a: bool,
    b: bool,
}

enum MyType {
    Variant1(Variant1),
    Variant2(Variant2),
}
Run Code Online (Sandbox Code Playgroud)

但是感觉很笨重。我想知道是否有更好的方法来完成类似的事情。

rust

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

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

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

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
查看次数

标签 统计

rust ×3

enums ×2

matching ×1