traits4 solution

This commit is contained in:
mo8it 2024-06-27 12:23:33 +02:00
parent b4b7ae63ad
commit c0452d160b
3 changed files with 45 additions and 22 deletions

View file

@ -1,23 +1,18 @@
// Your task is to replace the '??' sections so the code compiles.
//
// Don't change any line other than the marked one.
trait Licensed { trait Licensed {
fn licensing_info(&self) -> String { fn licensing_info(&self) -> String {
"some information".to_string() "Default license".to_string()
} }
} }
struct SomeSoftware {} struct SomeSoftware;
struct OtherSoftware;
struct OtherSoftware {}
impl Licensed for SomeSoftware {} impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {} impl Licensed for OtherSoftware {}
// YOU MAY ONLY CHANGE THE NEXT LINE // TODO: Fix the compiler error by only changing the signature of this function.
fn compare_license_types(software: ??, software_two: ??) -> bool { fn compare_license_types(software1: ???, software2: ???) -> bool {
software.licensing_info() == software_two.licensing_info() software1.licensing_info() == software2.licensing_info()
} }
fn main() { fn main() {
@ -30,17 +25,11 @@ mod tests {
#[test] #[test]
fn compare_license_information() { fn compare_license_information() {
let some_software = SomeSoftware {}; assert!(compare_license_types(SomeSoftware, OtherSoftware));
let other_software = OtherSoftware {};
assert!(compare_license_types(some_software, other_software));
} }
#[test] #[test]
fn compare_license_information_backwards() { fn compare_license_information_backwards() {
let some_software = SomeSoftware {}; assert!(compare_license_types(OtherSoftware, SomeSoftware));
let other_software = OtherSoftware {};
assert!(compare_license_types(other_software, some_software));
} }
} }

View file

@ -784,9 +784,10 @@ name = "traits4"
dir = "15_traits" dir = "15_traits"
hint = """ hint = """
Instead of using concrete types as parameters you can use traits. Try replacing Instead of using concrete types as parameters you can use traits. Try replacing
the '??' with 'impl [what goes here?]' `???` with `impl [what goes here?]`.
See the documentation at: https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters""" Related section in The Book:
https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters"""
[[exercises]] [[exercises]]
name = "traits5" name = "traits5"

View file

@ -1 +1,34 @@
// 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;
struct OtherSoftware;
impl Licensed for SomeSoftware {}
impl Licensed for OtherSoftware {}
fn compare_license_types(software1: impl Licensed, software2: impl Licensed) -> bool {
software1.licensing_info() == software2.licensing_info()
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn compare_license_information() {
assert!(compare_license_types(SomeSoftware, OtherSoftware));
}
#[test]
fn compare_license_information_backwards() {
assert!(compare_license_types(OtherSoftware, SomeSoftware));
}
}