相关疑难解决方法(0)

通过引用将值传递给函数并通过Box传递它有什么区别?

将值传递给函数并通过"Box"传递给函数有什么区别:

fn main() {
    let mut stack_a = 3;
    let mut heap_a = Box::new(3);

    foo(&mut stack_a);
    println!("{}", stack_a);

    let r = foo2(&mut stack_a);
    // compile error if the next line is uncommented
    // println!("{}", stack_a);

    bar(heap_a);
    // compile error if the next line is uncommented
    // println!("{}", heap_a);
}

fn foo(x: &mut i32) {
    *x = 5;
}

fn foo2(x: &mut i32) -> &mut i32 {
    *x = 5;
    x
}

fn bar(mut x: Box<i32>) {
    *x = 5;
} …
Run Code Online (Sandbox Code Playgroud)

rust

44
推荐指数
3
解决办法
2万
查看次数

你怎么能轻易借用Vec <Vec <T >>作为&[&[T]]?

如何轻松地将矢量矢量作为一片切片借用?

fn use_slice_of_slices<T>(slice_of_slices: &[&[T]]) {
    // Do something...
}

fn main() {
    let vec_of_vec = vec![vec![0]; 10];
    use_slice_of_slices(&vec_of_vec);
}
Run Code Online (Sandbox Code Playgroud)

我会收到以下错误:

error[E0308]: mismatched types
 --> src/main.rs:7:25
  |
7 |     use_slice_of_slices(&vec_of_vec);
  |                         ^^^^^^^^^^^ expected slice, found struct `std::vec::Vec`
  |
  = note: expected type `&[&[_]]`
             found type `&std::vec::Vec<std::vec::Vec<{integer}>>`
Run Code Online (Sandbox Code Playgroud)

我可以很容易地定义use_slice_of_slices

fn use_slice_of_slices<T>(slice_of_slices: &[Vec<T>]) {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

并且外部向量将作为切片借用,并且所有都可以工作.但是,如果仅仅为了争论,我想把它作为一片切片借用呢?

从假设自动胁迫&Vec<Vec<T>>&[&[T]]是不可能的,那么我怎样才能定义一个函数borrow_vec_of_vec,如下?

fn borrow_vec_of_vec<'a, T: 'a>(vec_of_vec: Vec<Vec<T>>) -> &'a [&'a [T]] {
    // Borrow vec_of_vec...
}
Run Code Online (Sandbox Code Playgroud)

把它用另一种方式,我怎么可能实现Borrow<[&[T]]> …

rust

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

我应该用什么类型的二维数组?

什么是错的类型a吗?

fn foo(a: &[&[f64]], x: &[f64]) {
    for i in 0..3 {
        for j in 0..4 {
            println!("{}", a[i][j]);
        }
    }
}

fn main() {
    let A: [[f64; 4]; 3] = [
        [1.1, -0.2, 0.1, 1.6],
        [0.1, -1.2, -0.2, 2.3],
        [0.2, -0.1, 1.1, 1.5],
    ];
    let mut X: [f64; 3] = [0.0; 3];

    foo(&A, &X);
}
Run Code Online (Sandbox Code Playgroud)

我得到编译失败:

error[E0308]: mismatched types
  --> src/main.rs:17:9
   |
17 |     foo(&A, &X);
   |         ^^ expected slice, found array of 3 elements
   |
   = …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
2
解决办法
3750
查看次数

在Rust的二维矢量

编者注:这个问题早于Rust 0.1(标记为2013-07-03),并且在语法上不是有效的Rust 1.0代码.答案可能仍包含有价值的信息.

有谁知道如何在Rust中创建可变的二维向量并将它们传递给要操作的函数?

这是我到目前为止所尝试的:

extern crate std;

fn promeni(rec: &[u8]) {
    rec[0][1] = 0x01u8;
}

fn main() {
    let mut rec = ~[[0x00u8,0x00u8],
        [0x00u8,0x00u8]
    ];
    io::println(u8::str(rec[0][1]));
    promeni(rec);
    io::println(u8::str(rec[0][1]));
}
Run Code Online (Sandbox Code Playgroud)

vector mutable rust rust-obsolete

5
推荐指数
3
解决办法
6706
查看次数

在Rust中创建向量的向量

这段代码不会编译:

fn main() {
    let m1 = vec![1, 2, 3];
    let m2 = vec![&m1, &m1, &m1];
    let m3 = vec![vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9]];

    for i in &m2 {
        for j in i {
            println!("{}", j);
        }
    }

    for i in &m3 {
        for j in i {
            println!("{}", j);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let m1 = vec![1, 2, 3];
    let m2 = vec![&m1, &m1, &m1];
    let m3 = vec![vec![1, 2, 3], vec![4, 5, …
Run Code Online (Sandbox Code Playgroud)

vector matrix rust

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

标签 统计

rust ×5

vector ×2

matrix ×1

mutable ×1

rust-obsolete ×1