use std::env;
use std::path::Path;
#[derive(Debug)]
pub enum Arg<'a> {
Dir(&'a Path),
File(&'a Path),
Short(String),
Full(String),
Symbol(String),
}
#[derive(Debug)]
pub struct ArgsList<'a> {
args: Vec<Arg<'a>>,
}
impl<'a> ArgsList<'_>{
pub fn new() -> Self {
let mut args = Vec::new();
let args_list: Vec<String> = env::args().collect();
for i in &args_list[1..] {
if i.starts_with("--") {
args.push(Arg::Full(i.to_string()));
continue;
} else if i.starts_with("-") {
args.push(Arg::Short(i.to_string()));
continue;
}
let temp = Path::new(i);
if temp.is_dir() {
args.push(Arg::Dir(temp));
} else if temp.is_file() {
args.push(Arg::File(temp));
}
}
ArgsList{args,}
}
}
一直提示cannot return value referencing local variable args_list
, 请问这里怎么改才能把Path 传出去?
1
共 5 条评论, 1 页
评论区
写评论谢谢, 盖好了. Path::new()返回的就是 个引用. 欢乐PathBuf 总算能通过编译了
--
👇
jackalchenxu: 程序的意图:创建struct ArgsList对象实例, 里面的数据单元是pub enum Arg, Arg的单元类型是String或者&Path。
&Path不适合这种场合,把引用去掉(这样也不需要生命周期声明),另外使用PathBuf,而不是Path。
--
👇
93996817: 都用String 试试;
都用String 是可以的. 但是我在外面引用时就得在创建Path 的对象了.所以想看看能不能有别的方法把Path也传出去
都用String 试试;
程序的意图:创建struct ArgsList对象实例, 里面的数据单元是pub enum Arg, Arg的单元类型是String或者&Path。
&Path不适合这种场合,把引用去掉(这样也不需要生命周期声明),另外使用PathBuf,而不是Path。
Path::new 那里检查一下api定义看看?