mirror of
https://github.com/notohh/rustlings.git
synced 2024-10-30 08:49:12 -04:00
generics1 rewrite and solution
This commit is contained in:
parent
b1daea1fe8
commit
46121b71cf
3 changed files with 38 additions and 6 deletions
|
@ -1,7 +1,18 @@
|
|||
// This shopping list program isn't compiling! Use your knowledge of generics to
|
||||
// fix it.
|
||||
// `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() {
|
||||
let mut shopping_list: Vec<?> = Vec::new();
|
||||
shopping_list.push("milk");
|
||||
// TODO: Fix the compiler error by annotating the type of the vector
|
||||
// `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:?}");
|
||||
}
|
||||
|
|
|
@ -734,8 +734,13 @@ test = false
|
|||
hint = """
|
||||
Vectors in Rust make use of generics to create dynamically sized arrays of any
|
||||
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]]
|
||||
name = "generics2"
|
||||
|
|
|
@ -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:?}");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue