小编Gys*_*cos的帖子

如何在嵌套映射中使用闭包?

我试图从创建每个元素的仿函数创建一个二维矩阵,并将其存储为一个平面Vec(每行连接).

我使用嵌套map(实际上是a flat_map和嵌套map)来创建每一行并连接它.这是我尝试过的:

fn make<T, F>(n: usize, m: usize, f: F) -> Vec<T>
where
    F: Fn(usize, usize) -> T,
{
    (0..m).flat_map(|y| (0..n).map(|x| f(x, y))).collect()
}

fn main() {
    let v = make(5, 5, |x, y| x + y);

    println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我在编译期间遇到错误:

error[E0597]: `y` does not live long enough
 --> src/main.rs:5:45
  |
5 |     (0..m).flat_map(|y| (0..n).map(|x| f(x, y))).collect()
  |                                    ---      ^ -          - borrowed value needs to live until here
  | …
Run Code Online (Sandbox Code Playgroud)

closures rust

12
推荐指数
1
解决办法
1006
查看次数

如何从数组中移出值?

我拥有一个3号数组的所有权,我想迭代它,随着我的去向移动元素.基本上,我想IntoIterator实现一个固定大小的数组.

由于数组没有在标准库中实现这个特性(我理解为什么),是否有解决方法来获得所需的效果?我的对象不是Copy也不是Clone.我可以Vec从数组中创建一个然后迭代进入Vec,但我甚至不确定如何做到这一点.

(有关信息,我想完成一系列的Complete)

这是一个简单的情况示例(天真的iter()尝试):

// No-copy, No-clone struct
#[derive(Debug)]
struct Foo;

// A method that needs an owned Foo
fn bar(foo: Foo) {
    println!("{:?}", foo);
}

fn main() {
    let v: [Foo; 3] = [Foo, Foo, Foo];

    for a in v.iter() {
        bar(*a);
    }
}
Run Code Online (Sandbox Code Playgroud)

操场

error[E0507]: cannot move out of borrowed content
  --> src/main.rs:14:13
   |
14 |         bar(*a);
   |             ^^ cannot move out of …
Run Code Online (Sandbox Code Playgroud)

arrays move rust

10
推荐指数
3
解决办法
1962
查看次数

从一个文件绘制多个数据集

注意:我可以控制数据文件的格式,但它必须是单个文件。

我正在尝试使用 gnuplot 在同一个图表上绘制多个数据集。理想情况下我想绘制这样的东西:

data_1 0 0
data_2 0 0
data_1 1 1
data_2 0 1
data_1 2 2
data_2 1 2
Run Code Online (Sandbox Code Playgroud)

等等。在这种情况下,data_1data_2应该是两条单独的曲线。

我还想避免将可能数据集的列表甚至数量放入 gnuplot 脚本中。基本上,我希望它按特定字段对数据点进行“分组”,并将每个组绘制为同一图表上的单独数据集。

作为最后的选择,我可以使用 grep 将原始文件分成每个数据集一个文件,并绘制这些文件(我想这更容易?),但我正在寻找一种使用单个文件来完成此操作的方法。

gnuplot

5
推荐指数
1
解决办法
7267
查看次数

标签 统计

rust ×2

arrays ×1

closures ×1

gnuplot ×1

move ×1