相关疑难解决方法(0)

添加引用和数字值时理解(自动?)Deref /强制

如何理解下面这段代码?我是Rust的新手,但有C/Haskell背景和一点点C++.我能找到的唯一参考是减轻强制.

fn main() {
    let xs: [u32; 4] = [0, 1, 2, 3];
    let mut i: u32 = 0;
    for x in xs.iter() {
        if i > *x {     // It looks x is an iterator. Understood.            
            i = i + x;  // no error. (coerced)
                        //Quote: "Rust will do this as many times
                        //       as possible until the types match."
            i = i + *x; // no error (explicit deref)
            i += x;     // error about u32/&u32 …
Run Code Online (Sandbox Code Playgroud)

rust

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

How could rust multiply &i32 with i32?

Consider this example:

fn main() {
    let v: Vec<i32> = vec![1, 2, 3, 4, 5];
    let b: i32 = (&v[2]) * 4.0;
    println!("product of third value with 4 is {}", b);
}
Run Code Online (Sandbox Code Playgroud)

This fails as expected as float can't be multiplied with &i32.

error[E0277]: cannot multiply `{float}` to `&i32`
 --> src\main.rs:3:23
  |
3 |   let b: i32 = (&v[2]) * 4.0;
  |                        ^ no implementation for `&i32 * {float}`
  |
  = help: the trait `std::ops::Mul<{float}>` is not implemented for …
Run Code Online (Sandbox Code Playgroud)

rust

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

为什么在比较变量时需要取消引用变量而不是在算术时取消引用?

我有以下代码:

fn example(known_primes: &[i32], number: i32, prime: i32, limit: i32) {
    let mut is_prime = true;

    for prime in known_primes {
        if number % prime == 0 {
            is_prime = false;
            break;
        }
        if *prime > limit {
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么我需要prime在第二个条件(*prime > limit)中取消引用,当我不需要在第一个条件()中这样做时number % prime == 0

这两个%<是两个数字并把返回一些运营商.唯一的区别似乎在于它们返回的内容(数字与布尔值).虽然为什么不能将借用的整数与文字整数进行比较? 确实解释了使代码工作所需的内容(所有重载的实现,理想情况下在标准库中),它没有说明它为什么起作用a % b.这些运营商之间是否存在根本区别?或者它还没有实现?

operators rust

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

标签 统计

rust ×3

operators ×1