fn parse_input(args: &[String]) -> (String, String) {
if args.len() < 3 {
panic!("\r\nat least 3 arguments!\r\n");
}
(args[1].clone(), args[2].clone())
}
fn parse_input3(args: &Vec<String>) -> (String, String) {
if args.len() < 3 {
panic!("\r\nat least 3 arguments!\r\n");
}
(args[1].clone(), args[2].clone())
}
fn main() {
let args: Vec<String> = env::args().collect();
let array_string: [String; 3] = ["0".to_string(),"1".to_string(),"2".to_string(),];
parse_input(&args); //ok
parse_input(&array_string); //ok
parse_input3(&args); //ok
parse_input3(&array_string); //编译报错
}
args和array_string是两种类型, 但都能传入parse_input, 这是什么原理?
1
共 2 条评论, 1 页
评论区
写评论因为它Vec实现了Deref Trait
Deref Trait可以将一个对一个类型的引用,隐式地,转化为对另外一个类型的引用
举几个🌰
Vec -> &[T] String -> &str PathBuf -> &Path Box -> &T
因为 Vec 实现了 Deref