为什么这三个print_max功能都会起作用?哪一种是最佳实践?是 的for number in number_list快捷方式吗for number in number_list.iter()?
fn main() {
let number_list = vec![34, 50, 25, 100, 65];
print_max_1(&number_list);
print_max_2(&number_list);
print_max_3(&number_list);
}
fn print_max_1(number_list: &[u16]) {
let mut largest = &number_list[0]; // borrow the first number
for number in number_list.iter() { // borrowing?
if number > largest {
largest = number;
}
}
println!("The largest number is {}", largest);
}
fn print_max_2(number_list: &[u16]) {
let mut largest = &number_list[0]; // borrow the first …Run Code Online (Sandbox Code Playgroud) 以下代码将工作并打印Foo("hello"):
#[derive(Debug)]
struct Foo<'a>(&'a str);
impl<'a> From<&'a str> for Foo<'a> {
fn from(s: &'a str) -> Self {
Foo(s)
}
}
fn main() {
let s: &str = "hello";
let foo = Foo::from(s);
println!("{:?}", foo);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用泛型,并将 all 更改str为T,它将不起作用:
#[derive(Debug)]
struct Foo<'a, T>(&'a T);
impl<'a, T> From<&'a T> for Foo<'a, T> {
fn from(s: &'a T) -> Self {
Foo(s)
}
}
fn main() {
let s: &str = "hello";
let foo = Foo::from(s); …Run Code Online (Sandbox Code Playgroud)