mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-11-22 07:50:59 +00:00
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
|
// ./src/generics.md
|
||
|
|
||
|
|
||
|
// A concrete type `A`.
|
||
|
struct A;
|
||
|
|
||
|
// In defining the type `Single`, the first use of `A` is not preceded by `<A>`.
|
||
|
// Therefore, `Single` is a concrete type, and `A` is defined as above.
|
||
|
struct Single(A);
|
||
|
// ^ Here is `Single`s first use of the type `A`.
|
||
|
|
||
|
// Here, `<T>` precedes the first use of `T`, so `SingleGen` is a generic type.
|
||
|
// Because the type parameter `T` is generic, it could be anything, including
|
||
|
// the concrete type `A` defined at the top.
|
||
|
struct SingleGen<T>(T);
|
||
|
|
||
|
fn part0() {
|
||
|
// `Single` is concrete and explicitly takes `A`.
|
||
|
let _s = Single(A);
|
||
|
|
||
|
// Create a variable `_char` of type `SingleGen<char>`
|
||
|
// and give it the value `SingleGen('a')`.
|
||
|
// Here, `SingleGen` has a type parameter explicitly specified.
|
||
|
let _char: SingleGen<char> = SingleGen('a');
|
||
|
|
||
|
// `SingleGen` can also have a type parameter implicitly specified:
|
||
|
let _t = SingleGen(A); // Uses `A` defined at the top.
|
||
|
let _i32 = SingleGen(6); // Uses `i32`.
|
||
|
let _char = SingleGen('a'); // Uses `char`.
|
||
|
}
|
||
|
|
||
|
pub fn main() {
|
||
|
part0();
|
||
|
}
|
||
|
|