< 返回版块

5angXR 发表于 2024-07-04 16:36

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, 这是什么原理?

评论区

写评论
Dangerise 2024-07-18 19:06

因为它Vec实现了Deref Trait

Deref Trait可以将一个对一个类型的引用,隐式地,转化为对另外一个类型的引用

举几个🌰

Vec -> &[T] String -> &str PathBuf -> &Path Box -> &T

我心飞翔 2024-07-04 16:42

因为 Vec 实现了 Deref

1 共 2 条评论, 1 页