Rust 表达式中的符号“@”是什么意思
what the sign "@" mean in Rust expression
我是 Rust 的新手,在学习标准库时,我在匹配示例中找到了表达式 Some(x @ 6..=10)
。 x @ 6..=10
是什么意思?
这是模式匹配的一种形式,具体来说 @ bindings。在形式...
let y = Some(3);
if let Some(x @ 6..=10) = y {
// ...
}
...变量y
需要是一个Some(...)
才能匹配,内部值如果在6到10范围内就会赋值给x
(包括的)。在上面的例子中,if
块将不会被执行,因为当 y
解构为 Some(...)
时,内部值不符合模式,因此 x
符合不绑定。
语法 low ..= high
允许您匹配 low
到 high
(含)范围内的所有数字。模式匹配表达式中的 @
允许您将变量绑定到匹配值。下面是一个例子来说明它们的用途:
fn log_num(maybe_num: Option<i32>) {
match maybe_num {
None => println!("didn't get a number"),
Some(x @ 0..=5) => println!("got number {} between 0-5", x),
Some(y @ 6..=10) => println!("got number {} between 6-10", y),
Some(z) => println!("got number {} larger than 10", z),
}
}
fn main() {
log_num(None);
log_num(Some(3));
log_num(Some(7));
log_num(Some(15));
}
something @ pattern
是一种进行模式匹配的方法。通常,匹配分支会为部分匹配值创建变量。但是 something @ pattern
创建一个变量 something
并将整个值移动或复制到其中。
我是 Rust 的新手,在学习标准库时,我在匹配示例中找到了表达式 Some(x @ 6..=10)
。 x @ 6..=10
是什么意思?
这是模式匹配的一种形式,具体来说 @ bindings。在形式...
let y = Some(3);
if let Some(x @ 6..=10) = y {
// ...
}
...变量y
需要是一个Some(...)
才能匹配,内部值如果在6到10范围内就会赋值给x
(包括的)。在上面的例子中,if
块将不会被执行,因为当 y
解构为 Some(...)
时,内部值不符合模式,因此 x
符合不绑定。
语法 low ..= high
允许您匹配 low
到 high
(含)范围内的所有数字。模式匹配表达式中的 @
允许您将变量绑定到匹配值。下面是一个例子来说明它们的用途:
fn log_num(maybe_num: Option<i32>) {
match maybe_num {
None => println!("didn't get a number"),
Some(x @ 0..=5) => println!("got number {} between 0-5", x),
Some(y @ 6..=10) => println!("got number {} between 6-10", y),
Some(z) => println!("got number {} larger than 10", z),
}
}
fn main() {
log_num(None);
log_num(Some(3));
log_num(Some(7));
log_num(Some(15));
}
something @ pattern
是一种进行模式匹配的方法。通常,匹配分支会为部分匹配值创建变量。但是 something @ pattern
创建一个变量 something
并将整个值移动或复制到其中。