traits5 solution

This commit is contained in:
mo8it 2024-06-27 12:29:25 +02:00
parent db4d649e55
commit 45cfe86fb0
3 changed files with 59 additions and 15 deletions

View file

@ -1,7 +1,3 @@
// Your task is to replace the '??' sections so the code compiles.
//
// Don't change any line other than the marked one.
trait SomeTrait { trait SomeTrait {
fn some_function(&self) -> bool { fn some_function(&self) -> bool {
true true
@ -14,20 +10,30 @@ trait OtherTrait {
} }
} }
struct SomeStruct {} struct SomeStruct;
struct OtherStruct {}
impl SomeTrait for SomeStruct {} impl SomeTrait for SomeStruct {}
impl OtherTrait for SomeStruct {} impl OtherTrait for SomeStruct {}
struct OtherStruct;
impl SomeTrait for OtherStruct {} impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {} impl OtherTrait for OtherStruct {}
// YOU MAY ONLY CHANGE THE NEXT LINE // TODO: Fix the compiler error by only changing the signature of this function.
fn some_func(item: ??) -> bool { fn some_func(item: ???) -> bool {
item.some_function() && item.other_function() item.some_function() && item.other_function()
} }
fn main() { fn main() {
some_func(SomeStruct {}); // You can optionally experiment here.
some_func(OtherStruct {}); }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_some_func() {
assert!(some_func(SomeStruct));
assert!(some_func(OtherStruct));
}
} }

View file

@ -792,12 +792,12 @@ https://doc.rust-lang.org/book/ch10-02-traits.html#traits-as-parameters"""
[[exercises]] [[exercises]]
name = "traits5" name = "traits5"
dir = "15_traits" dir = "15_traits"
test = false
hint = """ hint = """
To ensure a parameter implements multiple traits use the '+ syntax'. Try To ensure a parameter implements multiple traits use the '+ syntax'. Try
replacing the '??' with 'impl [what goes here?] + [what goes here?]'. replacing `???` with 'impl [what goes here?] + [what goes here?]'.
See the documentation at: https://doc.rust-lang.org/book/ch10-02-traits.html#specifying-multiple-trait-bounds-with-the--syntax""" Related section in The Book:
https://doc.rust-lang.org/book/ch10-02-traits.html#specifying-multiple-trait-bounds-with-the--syntax"""
# QUIZ 3 # QUIZ 3

View file

@ -1 +1,39 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 trait SomeTrait {
fn some_function(&self) -> bool {
true
}
}
trait OtherTrait {
fn other_function(&self) -> bool {
true
}
}
struct SomeStruct;
impl SomeTrait for SomeStruct {}
impl OtherTrait for SomeStruct {}
struct OtherStruct;
impl SomeTrait for OtherStruct {}
impl OtherTrait for OtherStruct {}
fn some_func(item: impl SomeTrait + OtherTrait) -> bool {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^
item.some_function() && item.other_function()
}
fn main() {
// You can optionally experiment here.
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_some_func() {
assert!(some_func(SomeStruct));
assert!(some_func(OtherStruct));
}
}