相关疑难解决方法(0)

在从引用中分配变量时,ref和&之间的区别是什么?

这段代码有什么问题?

fn example() {
    let vec = vec![1, 2, 3];
    let &_y = &vec;
}
Run Code Online (Sandbox Code Playgroud)
error[E0507]: cannot move out of borrowed content
 --> src/lib.rs:3:15
  |
3 |     let &_y = &vec;
  |         ---   ^^^^ cannot move out of borrowed content
  |         ||
  |         |data moved here
  |         help: consider removing the `&`: `_y`
  |
note: move occurs because `_y` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait
 --> src/lib.rs:3:10
  |
3 |     let &_y = &vec;
  |          ^^ …
Run Code Online (Sandbox Code Playgroud)

syntax reference pattern-matching rust

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

参数/模式中'&variable'的含义

&variable在模式或闭包参数中使用它意味着什么?

for &code in self.exit_code.iter() { ... }

let mut new_seps = do seps.iter().fold(~[]) |result, &next| { ... }
Run Code Online (Sandbox Code Playgroud)

下面我们就&code&nextfor循环和封闭的定义.什么&这些的意思是签?为什么我们不能简单地使用codenext没有&符号?它与ref模式匹配中的限定符有关吗?它与特征实现&中的self参数有关吗?

我在当前的Rust参考手册教程中都找不到任何关于此语法的内容.目前我认为这是某种隐式解除引用(这是从错误消息中得出的,如果我&在模式中省略的话会出现),但我不确定.

syntax pointers rust

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

引用如何在绑定表达式的模式中工作?

我在 Rust 书中遇到了下面的例子。

for &item in list.iter() {
    if item > largest {
        largest = item;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这意味着list.iter()返回对列表中元素的引用,&item但是在将其与最大数字进行比较时,为什么我们不使用*item&item另外,当我将第一行中的to更改为时,编译器item强制我在第二行和第三行中使用。*item

我在网上看到了另一个例子。

(0..).map(|x| x * x)
    .take_while(|&x| x <= limit)
    .filter(|x| is_even(*x))
Run Code Online (Sandbox Code Playgroud)

这里的闭包take_while接受&x但直接使用x,但闭包filter接受x而不引用但传递*xis_even

那么这在 Rust 中是如何工作的呢?

iterator reference rust

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

标签 统计

rust ×3

reference ×2

syntax ×2

iterator ×1

pattern-matching ×1

pointers ×1