我希望能够创建一个Range然后测试变量是否包含在该范围内.看起来像这样的东西:
fn main() {
let a = 3..5;
assert!(a.contains(4));
}
Run Code Online (Sandbox Code Playgroud)
现在,我看到的唯一明显的事情是使用Iterator::any.这很丑陋,因为它需要O(1)操作并使其成为O(n):
fn main() {
let mut a = 3..5;
assert!(a.any(|v: i32| v == 4));
}
Run Code Online (Sandbox Code Playgroud) 我想使用 Rust 的match语句在变量处于任意范围和其他情况下以不同的方式处理变量。在这种情况下,代码将如下所示:
// idx is usize variable
// num is usize variabel
let res: Option<f64> = match idx {
1..=num-5 => {
Some(func())
},
_ => None,
};
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
error: expected one of `::`, `=>`, `if`, or `|`, found `-`
--> src/features.rs:34:22
|
34 | 1..=num-5 => Some(func()),
| ^ expected one of `::`, `=>`, `if`, or `|`
Run Code Online (Sandbox Code Playgroud) Rust决定在模式中禁止float文字:完全允许匹配浮点文字值,不应该是#41255.它目前是一个警告,但在将来的版本中将是一个很难的错误.
我的问题是,如何使用以下代码实现等效?:
struct Point {
x: f64,
y: f64,
}
let point = Point {x: 5.0, y: 4.0};
match point {
Point {x: 5.0 , y} => println!("y is {} when x is 5", y), // Causes warning
_ => println!("x is not 5")
}
Run Code Online (Sandbox Code Playgroud)
现在不可能吗?我是否需要改变对模式的看法?还有另一种匹配方式吗?