【问题标题】:Why do I get "expected reference `&usize`" when printing?打印时为什么会出现“预期参考 `&usize`”?
【发布时间】:2021-09-08 00:02:23
【问题描述】:

我在 Rust 中有这个功能:

fn printboard(board: Vec<u32>) {
    println!("|  |{:>2$} {:>2$} {:>2$} {:>2$} {:>2$} {:>2$}|  |", 
        board[1], board[2], board[3], board[4], board[5], board[6]);
}

由于某种原因,代码在board[3] 处引发错误,提示“预期使用大小,发现 u32”。这不会发生在任何其他 board[x] 表达式中。知道为什么会这样吗?

这是完整的错误:

error[E0308]: mismatched types
 --> src/lib.rs:3:29
  |
3 |         board[1], board[2], board[3], board[4], board[5], board[6]);
  |                             ^^^^^^^^ expected `usize`, found `u32`
  |
  = note: expected reference `&usize`
             found reference `&u32`
  = note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)

【问题讨论】:

    标签: rust


    【解决方案1】:

    如果每个板子元素都应打印宽度为 2,则应省略 $s:

    fn printboard(board: Vec<u32>) {
        println!("|  |{:>2} {:>2} {:>2} {:>2} {:>2} {:>2}|  |", 
            board[1], board[2], board[3], board[4], board[5], board[6]);
    }
    

    请参阅 std::fmt 文档中的 Width

    格式说明符{:&gt;2} 表示右对齐宽度为 2,而{:&gt;2$} 表示右对齐第二个参数指定的宽度(board[3],因为它的索引为 0)。此宽度参数必须是 usize,这就是您收到类型错误的原因。

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 2014-12-06
      • 2014-07-06
      • 1970-01-01
      相关资源
      最近更新 更多