[Rust] Ownership

The following code will have borrowing problem

fn print_years(years: Vec<i32>) {
   for year in years.iter() {
      println!("Year: {}", year); 
   }
} // dealloc(years): after function scrop ends, dealloc happen

fn man() {
   let years = vec![1990,1995,2000,2010];
    
    print_years(years); // years got deallocated
    print_years(years); // compile error
}

 

Reoslve use-after-move compiler error: transfer ownership to caller scope by add return keyword in function.

fn print_years(years: Vec<i32>) -> Vec<i32> {
   for year in years.iter() {
      println!("Year: {}", year); 
   }
    
   return years; // If we add return, Rust will transfer ownership to caller scope
}

fn main() {
   let years = vec![1990,1995,2000,2010];
    
    let years2 = print_years(years);
    let years3 = print_years(years2);
}

 

.clone() is your friend when you are a beginner :) 

fn print_years(years: Vec<i32>) -> Vec<i32> {
   for year in years.iter() {
      println!("Year: {}", year); 
   }
}

fn main() {
   let years = vec![1990,1995,2000,2010];
    
    print_years(years.clone());
    print_years(years);
}

 

Using references:

fn print_years(years: &Vec<i32>) -> Vec<i32> {
   for year in years.iter() {
      println!("Year: {}", year); 
   }
}

fn main() {
   let years = vec![1990,1995,2000,2010];
    
    print_years(&years);
    print_years(&years);
}

Using a reference, it doesn't transfer the ownership, it just borrow the reference for other code to look at it.

 

posted @   Zhentiw  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-04-08 [Tools] Kill the process running on port 8080
2020-04-08 [RxJS] Encapsulate complex imperative logic in a simple observable
2020-04-08 [RxJS] Remember previous value by using pairwise operator
2019-04-08 [Functional Programming] Build a Query function by using Crocks (Pred, Pair, Maybe)
2018-04-08 [Angular] ngx-formly (AKA angular-formly for Angular latest version)
2018-04-08 [React Router] Create a ProtectedRoute Component in React Router (setState callback to force update)
2017-04-08 [SCSS] Organize SCSS into Multiple Files with Partials
点击右上角即可分享
微信分享提示