< 返回版块

枪炮与玫瑰 发表于 2018-07-19 13:01

Tags:deref

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)

评论区

写评论
x1957 2018-07-21 18:11

看看String的Deref

1 共 1 条评论, 1 页