Completed exercise up to Traits

This commit is contained in:
Samuele Iacoponi
2026-02-01 16:38:57 +01:00
parent 9ef3441dba
commit b1b81f7e07
33 changed files with 732 additions and 71 deletions

View File

@@ -6,6 +6,14 @@ trait AppendBar {
impl AppendBar for String {
// TODO: Implement `AppendBar` for the type `String`.
fn append_bar(self) -> Self{
// In this i need to put mut in front of the parameter
// self.push_str("Bar");
// self
// This way is more readable
self + "Bar"
}
}
fn main() {

View File

@@ -4,6 +4,13 @@ trait AppendBar {
// TODO: Implement the trait `AppendBar` for a vector of strings.
// `append_bar` should push the string "Bar" into the vector.
impl AppendBar for Vec<String> {
// TODO: Implement `AppendBar` for the type `String`.
fn append_bar(mut self) -> Self{
self.push("Bar".to_string());
self
}
}
fn main() {
// You can optionally experiment here.

View File

@@ -3,7 +3,9 @@ trait Licensed {
// implementors like the two structs below can share that default behavior
// without repeating the function.
// 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 {

View File

@@ -11,7 +11,8 @@ impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {}
// 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 {
// Impl Licensed means to accept every types that implement Licensed
software1.licensing_info() == software2.licensing_info()
}

View File

@@ -19,7 +19,7 @@ impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {}
// 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()
}