mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-26 00:00:03 +03:00
traits4 solution
This commit is contained in:
parent
b4b7ae63ad
commit
c0452d160b
|
@ -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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue