Rust中`let Position(x, y) = self;`的作用?为何能访问x和y?
解析Rust代码中的元组结构体解构
你看到的let Position(x, y) = self;不是初始化结构体,而是Rust里的解构赋值——专门用来把复杂类型(比如结构体、元组)拆成单个变量,方便直接使用。
先明确:Position是一个元组结构体,它的定义pub struct Position(pub i16, pub i16);没有常规结构体的字段名,只有两个i16类型的成员,本质和元组类似,只是带了结构体名称。
对于元组结构体,Rust允许用结构体名(变量1, 变量2)的模式来解构它的实例。这里的self是&Position类型(方法参数&self表示当前结构体的引用),解构时Rust会自动处理引用的解引用,把结构体里的两个i16值分别绑定到x和y变量上。
所以之后能直接用x和y,是因为它们已经被赋值为self指向的Position实例里的两个成员值,接下来调用x.abs() + y.abs()就是计算两个坐标的绝对值之和,也就是曼哈顿距离。
举个更直白的例子:
let pos = Position(3, -5); let Position(a, b) = pos; // 此时a=3,b=-5,可以直接用a和b做计算 println!("{}", a.abs() + b.abs()); // 输出8
内容的提问来源于stack exchange,提问作者JazzyJameson
相关产品推荐
相关产品推荐

