从向量中获取最后一个元素
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])...
我有这段简单的代码:
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])...