mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-27 00:00:03 +03:00
added traits exercises
This commit is contained in:
parent
a3f70124dc
commit
b559cdd73f
44
exercises/traits/traits1.rs
Normal file
44
exercises/traits/traits1.rs
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
// traits1.rs
|
||||||
|
// Time to implement some traits!
|
||||||
|
//
|
||||||
|
// Your task is to implement the trait
|
||||||
|
// `AppendBar' for the type `String'.
|
||||||
|
//
|
||||||
|
// The trait AppendBar has only one function,
|
||||||
|
// which appends "Bar" to any object
|
||||||
|
// implementing this trait.
|
||||||
|
|
||||||
|
// I AM NOT DONE
|
||||||
|
trait AppendBar {
|
||||||
|
fn append_bar(self) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AppendBar for String {
|
||||||
|
//Add your code here
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let s = String::from("Foo");
|
||||||
|
let s = s.append_bar();
|
||||||
|
println!("s: {}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn is_FooBar() {
|
||||||
|
assert_eq!(String::from("Foo").append_bar(), String::from("FooBar"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn is_BarBar() {
|
||||||
|
assert_eq!(
|
||||||
|
String::from("").append_bar().append_bar(),
|
||||||
|
String::from("BarBar")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
35
exercises/traits/traits2.rs
Normal file
35
exercises/traits/traits2.rs
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// traits2.rs
|
||||||
|
//
|
||||||
|
// Your task is to implement the trait
|
||||||
|
// `AppendBar' for a vector of strings.
|
||||||
|
//
|
||||||
|
// To implement this trait, consider for
|
||||||
|
// a moment what it means to 'append "Bar"'
|
||||||
|
// to a vector of strings.
|
||||||
|
//
|
||||||
|
// No boiler plate code this time,
|
||||||
|
// you can do this! Hints at the bottom.
|
||||||
|
|
||||||
|
// I AM NOT DONE
|
||||||
|
|
||||||
|
trait AppendBar {
|
||||||
|
fn append_bar(self) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: Add your code here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn is_vec_pop_eq_bar() {
|
||||||
|
let mut foo = vec![String::from("Foo")].append_bar();
|
||||||
|
assert_eq!(foo.pop().unwrap(), String::from("Bar"));
|
||||||
|
assert_eq!(foo.pop().unwrap(), String::from("Foo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
info.toml
22
info.toml
|
@ -586,6 +586,28 @@ multiply the values into a mutable variable. Or you might write code more
|
||||||
functionally with recursion and a match clause. But you can also use ranges
|
functionally with recursion and a match clause. But you can also use ranges
|
||||||
and iterators to solve this in rust."""
|
and iterators to solve this in rust."""
|
||||||
|
|
||||||
|
# TRAITS
|
||||||
|
|
||||||
|
[[exercises]]
|
||||||
|
name = "traits1"
|
||||||
|
path = "exercises/traits/traits1.rs"
|
||||||
|
mode = "test"
|
||||||
|
hint = """
|
||||||
|
A discussion about Traits in Rust can be found at:
|
||||||
|
https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-02-traits.html
|
||||||
|
"""
|
||||||
|
|
||||||
|
[[exercises]]
|
||||||
|
name = "traits2"
|
||||||
|
path = "exercises/traits/traits2.rs"
|
||||||
|
mode = "test"
|
||||||
|
hint = """
|
||||||
|
Notice how the trait takes ownership of 'self',and returns `Self'.
|
||||||
|
Try mutating the incoming string vector.
|
||||||
|
|
||||||
|
Vectors provide suitable methods for adding an element at the end. See
|
||||||
|
the documentation at: https://doc.rust-lang.org/std/vec/struct.Vec.html"""
|
||||||
|
|
||||||
# THREADS
|
# THREADS
|
||||||
|
|
||||||
[[exercises]]
|
[[exercises]]
|
||||||
|
|
Loading…
Reference in a new issue