Y'a t'il des spécialistes rust dans le coin ?
J'essaie de m'y mettre gentiement. J'ai vaguement compris le principe de scope, de borrow, toussa.
Néanmoins, je suis bloqué sur une macro toute bête :
Code :
use std::path::Path;
macro_rules! file_name_1 {
($path:expr) => {{
let path = Path::new($path);
path.file_name().unwrap().to_str().unwrap()
}};
}
macro_rules! file_name_2 {
($path:expr) => {{
let unix_path = $path.replace("\\", "/" );
let path = Path::new(&unix_path);
path.file_name().unwrap().to_str().unwrap()
}};
}
fn main() {
println!("{}", file_name_1!("/home/user/file.txt" ));
println!("{}", file_name_2!("c:\\home\\user\\file.txt" ));
}
|
error: `unix_path` does not live long enough
note: in expansion of format_args!
<std macros>:2:25: 2:56 note: expansion site
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
<std macros>:2:1: 2:58 note: reference must be valid for the call at 2:0...
<std macros>:2 $ crate:: io:: _print ( format_args ! ( $ ( $ arg ) * ) ) ) ;
<std macros>:1:1: 2:62 note: in expansion of print!
<std macros>:3:1: 3:54 note: expansion site
<std macros>:1:1: 3:58 note: in expansion of println!
error: aborting due to previous error
|
Je comprends le problème. Mais je ne vois pas de solution simple pour obenir une macro simple qui me retourne le file_name d'un chemin donné, que le chemin soit de type unix ou windows.
Avez-vous des idées ?
---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98