30 lines
		
	
	
		
			506 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			506 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| #[macro_use(defer)]
 | |
| extern crate scopeguard;
 | |
| 
 | |
| use scopeguard::guard;
 | |
| 
 | |
| fn f() {
 | |
|     defer! {
 | |
|         println!("Called at return or panic");
 | |
|     }
 | |
|     panic!();
 | |
| }
 | |
| 
 | |
| use std::fs::File;
 | |
| use std::io::Write;
 | |
| 
 | |
| fn g() {
 | |
|     let f = File::create("newfile.txt").unwrap();
 | |
|     let mut file = guard(f, |f| {
 | |
|         // write file at return or panic
 | |
|         let _ = f.sync_all();
 | |
|     });
 | |
|     // access the file through the scope guard itself
 | |
|     file.write_all(b"test me\n").unwrap();
 | |
| }
 | |
| 
 | |
| fn main() {
 | |
|     f();
 | |
|     g();
 | |
| }
 |