traits3 solution

This commit is contained in:
mo8it 2024-06-27 12:11:57 +02:00
parent c07209b635
commit b4b7ae63ad
3 changed files with 48 additions and 13 deletions

View file

@ -1,9 +1,8 @@
// Your task is to implement the Licensed trait for both structures and have
// them return the same information without writing the same function twice.
//
// Consider what you can add to the Licensed trait.
trait Licensed { trait Licensed {
// TODO: Add a default implementation for `licensing_info` so that
// 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;
} }
@ -15,8 +14,8 @@ struct OtherSoftware {
version_number: String, version_number: String,
} }
impl Licensed for SomeSoftware {} // Don't edit this line impl Licensed for SomeSoftware {} // Don't edit this line.
impl Licensed for OtherSoftware {} // Don't edit this line impl Licensed for OtherSoftware {} // Don't edit this line.
fn main() { fn main() {
// You can optionally experiment here. // You can optionally experiment here.
@ -28,7 +27,7 @@ mod tests {
#[test] #[test]
fn is_licensing_info_the_same() { fn is_licensing_info_the_same() {
let licensing_info = String::from("Some information"); let licensing_info = "Default license";
let some_software = SomeSoftware { version_number: 1 }; let some_software = SomeSoftware { version_number: 1 };
let other_software = OtherSoftware { let other_software = OtherSoftware {
version_number: "v2.0.0".to_string(), version_number: "v2.0.0".to_string(),

View file

@ -772,11 +772,12 @@ the value is owned anyway."""
name = "traits3" name = "traits3"
dir = "15_traits" dir = "15_traits"
hint = """ hint = """
Traits can have a default implementation for functions. Structs that implement Traits can have a default implementation for functions. Data types that
the trait can then use the default version of these functions if they choose not implement the trait can then use the default version of these functions
to implement the function themselves. if they choose not to implement the function themselves.
See the documentation at: https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations""" Related section in The Book:
https://doc.rust-lang.org/book/ch10-02-traits.html#default-implementations"""
[[exercises]] [[exercises]]
name = "traits4" name = "traits4"

View file

@ -1 +1,36 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 trait Licensed {
fn licensing_info(&self) -> String {
"Default license".to_string()
}
}
struct SomeSoftware {
version_number: i32,
}
struct OtherSoftware {
version_number: String,
}
impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn is_licensing_info_the_same() {
let licensing_info = "Default license";
let some_software = SomeSoftware { version_number: 1 };
let other_software = OtherSoftware {
version_number: "v2.0.0".to_string(),
};
assert_eq!(some_software.licensing_info(), licensing_info);
assert_eq!(other_software.licensing_info(), licensing_info);
}
}