相关疑难解决方法(0)

我可以在不将结果绑定到let/match/for语句中的新变量的情况下构造元组吗?

我想构造一个元组并将结果的一部分分配给一个新变量,并将结果的另一部分分配给现有的.

以下代码说明了intent(这是一个导致无限循环打印的愚蠢示例[0]):

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let (head, list) = list.split_at(1);
        // An obvious workaround here is to introduce a new variable in the above
        // let statement, and then just assign it to list.
        println!("{:?}", head);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码创建一个新变量,list而不是重新分配它.

如果我将代码更改为以下(为了避免let引入新list变量),它不会编译:

fn main() {
    let mut list = &[0, 1, 2, 3][..];
    while !list.is_empty() {
        let head;
        (head, list) = list.split_at(1);
        println!("{:?}", …
Run Code Online (Sandbox Code Playgroud)

rust

17
推荐指数
2
解决办法
2301
查看次数

如何在结构的可变引用中为字段交换新值?

我有一个带字段的结构:

struct A {
    field: SomeType,
}
Run Code Online (Sandbox Code Playgroud)

给定a &mut A,如何移动值field并交换新值?

fn foo(a: &mut A) {
    let mut my_local_var = a.field;
    a.field = SomeType::new();

    // ...
    // do things with my_local_var
    // some operations may modify the NEW field's value as well.
}
Run Code Online (Sandbox Code Playgroud)

最终目标相当于一项get_and_set()行动.在这种情况下,我并不担心并发性.

rust

16
推荐指数
2
解决办法
2788
查看次数

如何将循环中的变量更新为对循环内创建的值的引用?

我想进入一个循环,n其中包含一个由函数借用的变量.在每一步,n取一个新的价值; 退出循环时,作业完成后,与其他变量的帮助,n永远不会再被使用.

如果我不使用引用,我有这样的事情:

fn test(n: Thing) -> usize {
    // stuff
    let mut n = n;
    for i in 1..10 {
        let (q, m) = n.do_something(...);
        n = m;
        // stuff with x
    }
    x
}
Run Code Online (Sandbox Code Playgroud)

x一些与计算的结果qm,但它是一个usize类型的,我没有遇到任何问题,在这部分代码.我没有测试这段代码,但这是个主意.我可以编写像这样的工作代码.

因为我想用引用来做; 我试着写:

fn test(n: &Thing) -> usize {
    // stuff
    let mut n = n;
    for i in 1..10 {
        let (q, m) = (*n).do_something(...);
        n = &m; …
Run Code Online (Sandbox Code Playgroud)

lifetime rust borrow-checker

4
推荐指数
2
解决办法
2195
查看次数

返回Rust中向量的最后n个元素,而不会改变向量

我正在努力寻找一种方法从矢量的末尾取两个值,对这些值求和,并将和推送到矢量.

我发现pop,truncatedrain不工作,因为他们从原来的矢量取出值.

fn main() {
    println!("Which Fibonacci number would you like to find?");

    let mut fib_num = String::new();

    io::stdin().read_line(&mut fib_num)
        .expect("Failed to read line");

    let fib_num: u32 = fib_num.trim().parse()
        .expect("Please enter a number");

    let mut stored_nums: Vec<u32> = vec![0, 1];

    while fib_num > stored_nums.len() as u32 {
        let mut limit = stored_nums.len();
        let mut new_num1 = stored_nums.pop().unwrap();
        let mut new_num2 = stored_nums.pop().unwrap_or(0);
        stored_nums.push(new_num1 + new_num2);
    }
}
Run Code Online (Sandbox Code Playgroud)

vector rust

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

如何交换两个数字?

我试图在没有任何库的情况下在 Rust 中交换两个整数。

fn main() {
    let mut a = 5;
    let mut b = 6;
    swap(&mut a, &mut b);
    println!("{}, {}", a, b); // expecting 6, 5
}
Run Code Online (Sandbox Code Playgroud)

首先我试过:

fn swap(mut a: &mut u32, mut b: &mut u32) {
    (a, b) = (b, a); // destructuring assignments are not currently supported
}
Run Code Online (Sandbox Code Playgroud)

然后:

fn swap(mut a: &mut u32, mut b: &mut u32) {
    let temp = a;
    a = b;
    b = temp;
}
// got error[E0623]: lifetime mismatch …
Run Code Online (Sandbox Code Playgroud)

rust

2
推荐指数
1
解决办法
194
查看次数

元组分配给可变结构参数

I\xe2\x80\x99m 收到错误 I\xe2\x80\x99m 不确定如何处理,与 I\xe2\x80\x99m 尝试的元组分配相关。下面的函数incr出现left-hand of expression not valid错误。我有什么误解吗?

\n\n
struct Fib {\n    i: u64,\n    fa: u64,\n    fb: u64,\n}\n\nimpl Fib {\n    fn incr(&mut self) {\n        self.i += 1;\n        (self.fa, self.fb) = (self.fa + self.fb, self.fa);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

methods tuples rust

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

如何在 Rust 中同时分配 2 个变量?

我目前正在通过 roguelike 教程自学 Rust,并且我正在尝试按下按键以对角移动角色,这意味着player_x -=1,player_y -= 1向左。

无论我尝试以哪种方式排列代码,我都会不断收到来自编译器的错误消息。我在文档或 GitHub 上的任何地方都找不到任何示例。

Key { code: Escape, .. } => return true, // exit game

// movement keys
Key { code: Up, .. } => *player_y -= 1,
Key { code: Down, .. } => *player_y += 1,
Key { code: Left, .. } => *player_x -= 1,
Key { code: Right, .. } => *player_x += 1,
Key { printable: 'k', .. } => *player_y -= 1,
Key …
Run Code Online (Sandbox Code Playgroud)

rust

0
推荐指数
1
解决办法
1182
查看次数

标签 统计

rust ×7

borrow-checker ×1

lifetime ×1

methods ×1

tuples ×1

vector ×1