从向量中获取最后一个元素

Get last element from vector

我有这段简单的代码:

fn main() {
    let mut blockchain: Vec<blockchain::Block> = Vec::new();

    let genesis_block = blockchain::create_block("genesis_block");

    blockchain::add_block_to_blockchain(&mut blockchain, genesis_block);
}

我的错误发生在这里:

pub fn get_last_block(blockchain: &Vec<Block>) -> Block {
    return blockchain[blockchain.len() - 1];
}

它说:

我对 Rust 还很陌生,有人能解释一下为什么这行不通吗?

我只是想获取这个向量的最后一个元素。

我应该传递这个向量的所有权而不是借用它吗?

编辑:这是我现在的结果:

pub fn get_last_block(blockchain: &Vec<Block>) -> Option<&Block> {
    return blockchain.last();
}

blockchain 可能为空。我检查 is_some 是否返回值

let block = blockchain::get_last_block(&blockchain);
if block.is_some() {
    blockchain::print_block(block.unwrap());
}

由于您是借用矢量,您可以:

  • return 对块的引用
  • 克隆块
  • 从 vec 中弹出块并return它(你需要可变地借用它,&mut

此外,考虑使用 Option 作为 return 类型,以防您的向量为空。通过使用它,您可以直接调用 last,例如,这将 return 引用 & 最后一个 Block:

pub fn get_last_block(blockchain: &Vec<Block>) -> Option<&Block> {
    blockchain.last()
}

挑剔,你可以在函数签名中使用切片而不是 Vec

fn get_last_block(blockchain: &[Block])...