struct Point {
x: f64,
y: f64,
}
enum Shape {
Circle(Point, f64),
Rectangle(Point, Point),
}
let my_shape = Shape::Circle(Point { x: 0.0, y: 0.0 }, 10.0);
我想打印出circle
的第二个属性,即10。这里是0。我试过my_shape.last
和my_shape.second
,但都不起作用。
我该怎么做才能打印出10。0在这种情况下?
7条答案
按热度按时间qyyhg6bp1#
由于您只对匹配其中一个变量感兴趣,因此可以使用
if let
表达式而不是match
:这意味着“如果
my_shape
可以被解构为Circle
,则不对第一个索引做任何事情,而是将第二个索引的值绑定到radius
”。mec1mxoz2#
您可以使用模式匹配:
示例输出:
3qpi33ja3#
下面是另一种方法:
只有当模式是不可反驳的时,例如当您匹配的枚举类型只有一个变体时,这才有效。为了使它工作,我不得不删除未使用的
Rectangle
变体。在有多个变量的情况下,无论如何都可能需要完整的匹配表达式,因为您可能要处理不止一种形状。
vawmfj5a4#
Rust Programming Language(Rust编程语言):
匹配臂的另一个有用特性是它们可以绑定到与模式匹配的值的部分。这就是我们如何从枚举变量中提取值。
[...]
如果你想编写能够处理不同类型的函数,可以看看traits。
xdnvmnnf5#
对于简单的值检索,可以使用“if let”
s8vozzvw6#
或
kh212irz7#
Rust 1.65.0为我们带来了let-else,它允许您以一种新的方式访问单个枚举变量,与match或if-let相比,嵌套更少: