Compare commits

...
3 Commits
Author SHA1 Message Date
AramJonghu 3f32906547 feat: quiz3 done of traits and generics 2026-09-11 17:38:14 +02:00
AramJonghu 8ded4cc8b5 feat: traits done 2026-09-11 17:37:48 +02:00
AramJonghu b94cdfd4c4 feat: generics done 2026-09-11 17:37:16 +02:00
8 changed files with 23 additions and 12 deletions
+1 -1
View File
@@ -6,7 +6,7 @@ fn main() {
// TODO: Fix the compiler error by annotating the type of the vector // 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 // `Vec<T>`. Choose `T` as some integer type that can be created from
// `u8` and `i8`. // `u8` and `i8`.
let mut numbers = Vec::new(); let mut numbers: Vec<i16> = Vec::new();
// Don't change the lines below. // Don't change the lines below.
let n1: u8 = 42; let n1: u8 = 42;
+4 -4
View File
@@ -1,12 +1,12 @@
// This powerful wrapper provides the ability to store a positive integer value. // This powerful wrapper provides the ability to store a positive integer value.
// TODO: Rewrite it using a generic so that it supports wrapping ANY type. // TODO: Rewrite it using a generic so that it supports wrapping ANY type.
struct Wrapper { struct Wrapper<T> {
value: u32, value: T,
} }
// TODO: Adapt the struct's implementation to be generic over the wrapped value. // TODO: Adapt the struct's implementation to be generic over the wrapped value.
impl Wrapper { impl<T> Wrapper<T> {
fn new(value: u32) -> Self { fn new(value: T) -> Self {
Wrapper { value } Wrapper { value }
} }
} }
+3
View File
@@ -6,6 +6,9 @@ trait AppendBar {
impl AppendBar for String { impl AppendBar for String {
// TODO: Implement `AppendBar` for the type `String`. // TODO: Implement `AppendBar` for the type `String`.
fn append_bar(self) -> Self {
self + &String::from("Bar")
}
} }
fn main() { fn main() {
+6
View File
@@ -4,6 +4,12 @@ trait AppendBar {
// TODO: Implement the trait `AppendBar` for a vector of strings. // TODO: Implement the trait `AppendBar` for a vector of strings.
// `append_bar` should push the string "Bar" into the vector. // `append_bar` should push the string "Bar" into the vector.
impl AppendBar for Vec<String> {
fn append_bar(mut self) -> Self {
self.push(String::from("Bar"));
self
}
}
fn main() { fn main() {
// You can optionally experiment here. // You can optionally experiment here.
+3 -1
View File
@@ -3,7 +3,9 @@ trait Licensed {
// implementors like the two structs below can share that default behavior // implementors like the two structs below can share that default behavior
// without repeating the function. // without repeating the function.
// The default license information should be the string "Default license". // The default license information should be the string "Default license".
fn licensing_info(&self) -> String; fn licensing_info(&self) -> String {
String::from("Default license")
}
} }
struct SomeSoftware { struct SomeSoftware {
+1 -1
View File
@@ -11,7 +11,7 @@ impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {} impl Licensed for OtherSoftware {}
// TODO: Fix the compiler error by only changing the signature of this function. // TODO: Fix the compiler error by only changing the signature of this function.
fn compare_license_types(software1: ???, software2: ???) -> bool { fn compare_license_types(software1: impl Licensed, software2: impl Licensed) -> bool {
software1.licensing_info() == software2.licensing_info() software1.licensing_info() == software2.licensing_info()
} }
+1 -1
View File
@@ -19,7 +19,7 @@ impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {} impl OtherTrait for OtherStruct {}
// TODO: Fix the compiler error by only changing the signature of this function. // TODO: Fix the compiler error by only changing the signature of this function.
fn some_func(item: ???) -> bool { fn some_func(item: impl SomeTrait + OtherTrait) -> bool {
item.some_function() && item.other_function() item.some_function() && item.other_function()
} }
+4 -4
View File
@@ -12,18 +12,18 @@
// block to support alphabetical report cards in addition to numerical ones. // block to support alphabetical report cards in addition to numerical ones.
// TODO: Adjust the struct as described above. // TODO: Adjust the struct as described above.
struct ReportCard { struct ReportCard<T> {
grade: f32, grade: T,
student_name: String, student_name: String,
student_age: u8, student_age: u8,
} }
// TODO: Adjust the impl block as described above. // TODO: Adjust the impl block as described above.
impl ReportCard { impl<T: std::fmt::Display> ReportCard<T> {
fn print(&self) -> String { fn print(&self) -> String {
format!( format!(
"{} ({}) - achieved a grade of {}", "{} ({}) - achieved a grade of {}",
&self.student_name, &self.student_age, &self.grade, self.student_name, self.student_age, self.grade,
) )
} }
} }