fn foo(s: &str) { }
let owned = "Hello".to_string(); foo(&owned); 因为String实现了 Deref<Target=str>
问: 为什么函数参数类型是&str,传入 &String 会匹配
答: Rust在调用函数的时候会在参数前面加足够数量的 * ,在编译器做类型匹配的时候,传入的参数是 String 类型,而函数要求的是 &str
foo(&owned) == foo(&*owned) == foo(& (&str)) == foo(&str)
1
共 1 条评论, 1 页
评论区
写评论看看String的Deref