相关疑难解决方法(0)

如何测试值是否在Range范围内?

我希望能够创建一个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

13
推荐指数
4
解决办法
3264
查看次数

我想使用 Rust 中的 match 语句的条件来执行“0..=a+5”

我想使用 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

9
推荐指数
1
解决办法
7719
查看次数

匹配浮点的替代方法

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)

现在不可能吗?我是否需要改变对模式的看法?还有另一种匹配方式吗?

pattern-matching match rust

7
推荐指数
1
解决办法
583
查看次数

标签 统计

rust ×3

match ×1

pattern-matching ×1