面试题答案
一键面试-
传递方式: 可以这样调用函数:
print_length(&s1 as &str);
或者print_length(&*s1);
。 -
解引用原理:
String
类型实现了Deref
trait,它可以被解引用为str
类型。在Rust中,当使用&*s1
时,*s1
首先尝试将String
类型的s1
解引用为str
类型(因为String
实现了Deref
trait指向str
),然后再加上&
取引用,这样就得到了&str
类型,满足print_length
函数参数的要求。而&s1 as &str
这种方式是通过显式类型转换,将&String
类型转换为&str
类型,这也是利用了String
到str
的内在联系,同样满足函数参数要求。