如何在rust中访问复杂枚举类型的元素?

道格

例如,考虑:

#[deriving(Eq, Show)]
struct EventOne {
  x: f64,
  y: f64
}

#[deriving(Eq, Show)]
struct EventTwo {
  x: int,
  y: int
}

#[deriving(Eq, Show)]
enum ComplexEvent {
  A(EventOne, ~str),
  B(EventTwo, ~str)
}

我这里有一个复杂的枚举ComplexEvent,可以是A或B。

我希望能够做这样的事情:

let x = A(EventOne { x: 0.1, y: 0.1}, ~"Hello");
let z = x.EventOne;

...但是导致错误:

error: attempted access of field `EventOne` on type `union::ComplexEvent`, but no field with that name was found
let z = x.EventOne;

嗯...好吧,作为数组?

error: cannot index a value of type `union::ComplexEvent`
let z = x[0];

好吧,要保证输入的安全性,也许您需要为此使用match?

match x {
  A(_, _) => ???,
  B(_, _) => ???
}

...

union.rs:28:3: 31:4 error: mismatched types: expected `()` but found `std::result::Result<(),std::io::IoError>` (expected () but found enum std::result::Result)
union.rs:28   match x {
union.rs:29     A(_, _) => ???,
union.rs:30     B(_, _) => ???
union.rs:31   }
error: aborting due to previous error

我可能只是错过了使它正常工作所需的特定语法,但我一生都无法解决……

编辑:删除示例上的=>操作,因为它似乎使所有人感到困惑。阅读有问题的人!我想已经存在的枚举获取一个子值,而不是对枚举进行match()并执行println!

弗拉基米尔·马特维耶夫(Vladimir Matveev)

很简单:

let x = A(EventOne { x: 0.1, y: 0.1 }, ~"Hello");
match x {
    A(EventOne{x, y}, s) => println!("{}, {}, {}", x, y, s),
    B(EventTwo{x, y}, s) => println!("{}, {}, {}", x, y, s)
}

请注意,这样的匹配意味着您要移出~str字段,因为它不是隐式可复制的,因此x成为部分移动的值,您将无法进一步使用它。如果确实要在匹配后使用该值,则可以s通过引用进行绑定

let x = B(EventTwo { x: 1, y: 2 }, ~"World");
match x {
    A(EventOne{x, y}, ref s) => println!("{}, {}, {}", x, y, *s),
    B(EventTwo{x, y}, ref s) => println!("{}, {}, {}", x, y, *s)
}

在这种情况下,s它的类型为&~str,因此您必须取消引用它才能打印它。x之后,您将可以使用,因为您没有将~str字段移出,并且另一个字段是隐式可复制的,因为它由隐式可复制的数据组成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在rust中访问复杂枚举类型的元素?

来自分类Dev

如何在Rust中访问方法内部的元组枚举的参数

来自分类Dev

如何在 Delphi 中检查枚举的 IStorage 元素的类型?

来自分类Dev

如何在Rust中定义“重叠”枚举?

来自分类Dev

如何在python中访问复杂数据结构中的某些元素

来自分类Dev

如何在Rust中导入和引用枚举类型?

来自分类Dev

如何在protobufs中访问python枚举

来自分类Dev

如何在 Kotlin 中访问枚举值

来自分类Dev

如何为Rust中的枚举指定表示类型以与C ++交互?

来自分类Dev

如何在Rust中将ref转换为en16的枚举值(基本枚举类型)?

来自分类Dev

如何在EA中更改枚举元素中的类元素

来自分类Dev

如何在Rust中创建具有常量值的枚举?

来自分类Dev

如何在Rust中遍历结构的元素?

来自分类Dev

如何在Rust中遍历结构的元素?

来自分类Dev

如何访问类型定义OCaml中的元素

来自分类Dev

如何在R中的复杂列表中合并元素?

来自分类Dev

如何在F#中以自己定义的类型正确访问元素

来自分类Dev

如何在Spring MVC中访问枚举值

来自分类Dev

如何在C程序的结构中访问定义的枚举

来自分类Dev

如何在打字稿中访问枚举的名称

来自分类Dev

如何在结构模型中访问枚举?迅速

来自分类Dev

在Rust中访问新类型

来自分类Dev

如何在iFrame中访问DOM元素

来自分类Dev

如何在JSP中访问JSONArray元素

来自分类Dev

如何在GridSearchCV中访问ColumnTransformer元素

来自分类Dev

如何在RStudio中访问此元素

来自分类Dev

如何在suds python中创建复杂类型

来自分类Dev

如何在实体索引中包含复杂类型?

来自分类Dev

如何在Android中创建复杂类型

Related 相关文章

热门标签

归档