Rust 理解函数参数类型声明

Rust 理解函数参数类型声明,rust,Rust,我在看报纸。其中,他们给出了以下典型示例: fn is_odd(n: u32) -> bool { n % 2 == 1 } fn main() { let upper = 1000; println!("imperative style: {}", acc); let sum_of_squared_odd_numbers: u32 = (0..).map(|n| n * n)

我在看报纸。其中,他们给出了以下典型示例:

fn is_odd(n: u32) -> bool {
    n % 2 == 1
}

fn main() {
   let upper = 1000;

   println!("imperative style: {}", acc);

   let sum_of_squared_odd_numbers: u32 =
       (0..).map(|n| n * n)                             // All natural numbers squared
            .take_while(|&n_squared| n_squared < upper) // Below upper limit
            .filter(|&n_squared| is_odd(n_squared))     // That are odd
            .fold(0, |acc, n_squared| acc + n_squared); // Sum them
}
当我尝试编译时,编译器会出现以下错误:

error[E0614]: type `{integer}` cannot be dereferenced
  --> src\higherorder.rs:13:34
   |
13 |         .take_while(|&n_squared| *n_squared <= upper)
   |      
表示n_平方是i32而不是&i32。看起来这里正在进行某种排序模式匹配/分解,但我找不到相关文档。

您正在使用:

您正在使用:


如果你写| n|u squared |,你将得到预期的错误,在正文中使用*n|u squared将修复它。你看,因为我编辑了评论,而你可能没有看到它:我添加了一个链接,指向一个老的Reddit讨论,正是这个问题。虽然锈迹已经发生了很大的变化,但这似乎仍然是正在发生的事情。文档中有:“@AlexeyRomanov Perfect!”!这就是我要找的。如果你写| n|u squared |,你会得到预期的错误,在正文中使用*n|u squared将修复它。你看,因为我编辑了评论,而你可能没有看到它:我添加了一个链接,指向一个老的Reddit讨论,正是这个问题。虽然锈迹已经发生了很大的变化,但这似乎仍然是正在发生的事情。文档中有:“@AlexeyRomanov Perfect!”!这就是我要找的。
error[E0614]: type `{integer}` cannot be dereferenced
  --> src\higherorder.rs:13:34
   |
13 |         .take_while(|&n_squared| *n_squared <= upper)
   |      
|&n_squared| n_squared < upper
|n_squared| *n_squared < upper
|&(x, y) : &(i32, i32)| x + y