11-字段访问表达式
字段访问表达式 — The Rust Reference
2 分钟阅读
译文 · 基于 The Rust Reference
原文链接: https://doc.rust-lang.org/reference/expressions/field-expr.html
r[expr.field]
字段访问表达式
r[expr.field.syntax]
FieldExpression -> Expression `.` IDENTIFIER
r[expr.field.intro] 字段表达式是一种位置表达式,求值为结构体或联合体某个字段所在的位置。
r[expr.field.mut] 当操作数可变时,字段表达式也是可变的。
r[expr.field.form]
字段表达式的语法是:一个表达式(称为容器操作数),然后是 .,最后是一个标识符。
r[expr.field.not-method-call] 字段表达式后面不能跟由圆括号括起、以逗号分隔的表达式列表,因为那会被解析为方法调用表达式。也就是说,它们不能作为调用表达式的函数操作数。
注意 将字段表达式包在圆括号表达式中,即可在调用表达式中使用它。
1 2 3 4 5 6 7 8# struct HoldsCallable<F: Fn()> { callable: F } let holds_callable = HoldsCallable { callable: || () }; // 非法:会被解析为调用名为 "callable" 的方法 // holds_callable.callable(); // 合法 (holds_callable.callable)();
示例:
| |
r[expr.field.autoref-deref]
自动解引用
若容器操作数的类型实现了 Deref 或 DerefMut(取决于操作数是否可变),则会自动解引用足够多次以使字段访问成为可能。该过程也简称 autoderef。
r[expr.field.borrow]
借用
在借用时,结构体的各个字段或对结构体的引用被当作彼此独立的实体。若该结构体未实现 Drop 且存储在局部变量中,这也适用于从各个字段中移出。若自动解引用是通过 Box 以外的用户定义类型完成的,则上述规则不适用。
| |