fnmain() { letnumber_list = vec![34, 50, 25, 100, 65]; letmut largest = &number_list[0]; fornumberin &number_list { if number > largest { largest = number; } } println!("The largest number is {largest}"); }
如果我们需要对比两个集合那么代码就会变成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
fnmain() { letnumber_list = vec![34, 50, 25, 100, 65]; letmut largest = &number_list[0]; fornumberin &number_list { if number > largest { largest = number; } } println!("The largest number is {largest}"); letnumber_list = vec![102, 34, 6000, 89, 54, 2, 43, 8]; letmut largest = &number_list[0]; fornumberin &number_list { if number > largest { largest = number; } } println!("The largest number is {largest}"); }
fnmain() { letnumber_list1 = vec![34, 50, 25, 100, 65]; letlargest1=largest(&number_list1); println!("The number_list1 largest number is {largest1}");
letnumber_list2 = vec![102, 34, 6000, 89, 54, 2, 43, 8]; letlargest2=largest(&number_list2); println!("The number_list2 largest number is {largest2}"); }
如果我们需要比较数字和字符该如何选择呢,函数的参数类型该如何设置呢?
泛型数据类型
观察如下两个函数,他们的逻辑没有区别,只是参数类型不同,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
fnlargest_i32(list: &[i32]) -> &i32 { letmut largest = &list[0]; foritemin list { if item > largest { largest = item; } } largest } fnlargest_char(list: &[char]) -> &char {//函数通过比较标量值判断大小 letmut largest = &list[0]; foritemin list { if item > largest { largest = item; } } largest }
fn largest<T>(list: &[T]) -> &T函数 largest 有泛型类型 T。它有个参数 list,其类型是元素为 T 的
slice。largest 函数会返回一个与 T 相同类型的引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
fnlargest<T>(list: &[T]) -> &T { letmut largest = &list[0]; foritemin list { if item > largest {//请注意这些代码还不能编译 largest = item; } } largest } fnmain() { letnumber_list = vec![34, 50, 25, 100, 65]; letresult = largest(&number_list); println!("The largest number is {result}"); letchar_list = vec!['y', 'm', 'a', 'q']; letresult = largest(&char_list); println!("The largest char is {result}"); }