generics1 rewrite and solution

This commit is contained in:
mo8it 2024-06-27 02:00:08 +02:00
parent b1daea1fe8
commit 46121b71cf
3 changed files with 38 additions and 6 deletions

View file

@ -1,7 +1,18 @@
// This shopping list program isn't compiling! Use your knowledge of generics to // `Vec<T>` is generic over the type `T`. In most cases, the compiler is able to
// fix it. // infer `T`, for example after pushing a value with a concrete type to the vector.
// But in this exercise, the compiler needs some help through a type annotation.
fn main() { fn main() {
let mut shopping_list: Vec<?> = Vec::new(); // TODO: Fix the compiler error by annotating the type of the vector
shopping_list.push("milk"); // `Vec<T>`. Choose `T` as some integer type that can be created from
// `u8` and `i8`.
let mut numbers = Vec::new();
// Don't change the lines below.
let n1: u8 = 42;
numbers.push(n1.into());
let n2: i8 = -1;
numbers.push(n2.into());
println!("{numbers:?}");
} }

View file

@ -734,8 +734,13 @@ test = false
hint = """ hint = """
Vectors in Rust make use of generics to create dynamically sized arrays of any Vectors in Rust make use of generics to create dynamically sized arrays of any
type. type.
If the vector `numbers` has the type `Vec<T>`, then we can only push values of
type `T` to it. By using `into()` before pushing, we ask the compiler to convert
`n1` and `n2` to `T`. But the compiler doesn't know what `T` is yet and needs a
type annotation.
You need to tell the compiler what type we are pushing onto this vector.""" `u8` and `i8` can both be converted to `i16`, `i32` and `i64`. Choose one for
the generic of the vector."""
[[exercises]] [[exercises]]
name = "generics2" name = "generics2"

View file

@ -1 +1,17 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 // `Vec<T>` is generic over the type `T`. In most cases, the compiler is able to
// infer `T`, for example after pushing a value with a concrete type to the vector.
// But in this exercise, the compiler needs some help through a type annotation.
fn main() {
// `u8` and `i8` can both be converted to `i16`.
let mut numbers: Vec<i16> = Vec::new();
// ^^^^^^^^^^ added
// Don't change the lines below.
let n1: u8 = 42;
numbers.push(n1.into());
let n2: i8 = -1;
numbers.push(n2.into());
println!("{numbers:?}");
}