Rust - Generics
Generics
Generics of Rust is same as Typescript's Generics. We can use it to give some freedom of variable type.
fn print_thing<T>(input: T) {
println!("{}", input);
}
fn main() {
print_thing(33);
}
We can use Generics "like" this, but not the same.
As we run this code, we can see the error
error[E0277]: `T` doesn't implement `std::fmt::Display`
It means, some value of T type might have no std::fmt::Display
implement. If we send Vector to print_thing
function, as Vector doesn't implement std::fmt::Display
, we cannot execute the println! statement. So we have to restrict our Generics.
use std::fmt::Display;
struct Book {
year: u8
}
fn give_thing<T: Display>(input: T) -> T {
println!("{}", input); // std::fmt::Display
input
}
fn main() {
let x = give_thing(33);
let y = give_thing(String::from("haha"));
println!("{} {}", x, y);
// let book = give_thing(Book{year: 11});
// cannot be executed
compare_and_print("Listen up!", 9, 8);
}
At this code, we set T: Display
and it means we can get any type T if T implemet std::fmt::Display
(we imported std::fmt::Display
, so we can omit std::fmt::
).
So we can execute our code. As you can see at the comment of main function, Book struct type does not implement std::fmt::Display
. So we cannot send Book struct type to give_thing
function.
Also we can use two or more generics at once.
use std::fmt::Display;
use std::cmp::PartialOrd;
fn compare_and_print<
T: Display,
U: Display + PartialOrd
>(statement: T, num1: U, num2: U) {
println!("{}! Is {} greater than {}? => {}", statement, num1, num2, num1 > num2);
}
fn main() {
compare_and_print("Listen up!", 9, 8);
}
As we can see above, compare_and_print
function has two Generics T
, U
. And U
implements Display + PartialOrd
.
First, let's see the logic of this function. we get statement
, num1
, num2
as param and print statement
, num1
, num2
, num1>num2
. So statement
and num1
, num2
have to implement Display
. Also, num1
, num2
have to implement PartialOrd
, cause PartialOrd
is for comparing things(and in the function, we are comparing num1
, num2
).
We can use multiple Generics with different implements like this.
Using Generics, we can make a lot more features with Rust!
Author And Source
이 문제에 관하여(Rust - Generics), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@eslerkang/Rust-Generics저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)