mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-25 23:10:30 +00:00
traits5 solution
This commit is contained in:
parent
db4d649e55
commit
45cfe86fb0
3 changed files with 59 additions and 15 deletions
|
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue