mirror of
https://github.com/LukasKalbertodt/programmieren-in-rust.git
synced 2024-11-18 02:48:58 +01:00
Add solution sheet9
This commit is contained in:
parent
2c45536be8
commit
68d838f8b6
36
aufgaben/sheet9/sol1/try-opt.rs
Executable file
36
aufgaben/sheet9/sol1/try-opt.rs
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
// If we would make this public for everyone, we would need to use absolute
|
||||||
|
// paths!
|
||||||
|
macro_rules! try_opt {
|
||||||
|
($e:expr) => {
|
||||||
|
match $e {
|
||||||
|
::std::option::Option::Some(v) => v,
|
||||||
|
None => return None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! name {
|
||||||
|
() => ($crate)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("{:?}", name!());
|
||||||
|
println!("consistent: {:?}", is_home_consistent());
|
||||||
|
println!("dummy: {:?}", foo());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn foo() -> Option<u8> {
|
||||||
|
let a: u8 = try_opt!(Some(50));
|
||||||
|
let b = try_opt!(a.checked_mul(6));
|
||||||
|
|
||||||
|
Some(b / 2)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_home_consistent() -> Option<bool> {
|
||||||
|
use std::env;
|
||||||
|
|
||||||
|
let home_dir = try_opt!(env::home_dir());
|
||||||
|
let home_var = try_opt!(env::var_os("HOME"));
|
||||||
|
|
||||||
|
Some(home_dir == home_var)
|
||||||
|
}
|
42
aufgaben/sheet9/sol2/fmt.rs
Executable file
42
aufgaben/sheet9/sol2/fmt.rs
Executable file
@ -0,0 +1,42 @@
|
|||||||
|
struct LoveMachine<T> {
|
||||||
|
inner: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> LoveMachine<T> {
|
||||||
|
pub fn new(t: T) -> Self {
|
||||||
|
LoveMachine {
|
||||||
|
inner: t,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! impl_fmt {
|
||||||
|
($fmt_trait:ident, $fmt_str:expr) => {
|
||||||
|
impl<T> ::std::fmt::$fmt_trait for LoveMachine<T>
|
||||||
|
where T: ::std::fmt::$fmt_trait
|
||||||
|
{
|
||||||
|
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
|
||||||
|
write!(f, concat!("♥", $fmt_str, "♥"), self.inner)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_fmt!(Display, "{}");
|
||||||
|
impl_fmt!(Debug, "{:?}");
|
||||||
|
impl_fmt!(Octal, "{:o}");
|
||||||
|
impl_fmt!(LowerHex, "{:x}");
|
||||||
|
impl_fmt!(UpperHex, "{:X}");
|
||||||
|
impl_fmt!(Binary, "{:b}");
|
||||||
|
impl_fmt!(LowerExp, "{:e}");
|
||||||
|
impl_fmt!(UpperExp, "{:E}");
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let lm = LoveMachine::new(27);
|
||||||
|
println!("Display: {}", lm);
|
||||||
|
println!("Debug: {:?}", lm);
|
||||||
|
println!("Octal: {:o}", lm);
|
||||||
|
println!("LowerHex: {:x}", lm);
|
||||||
|
println!("UpperHex: {:X}", lm);
|
||||||
|
println!("Binary: {:b}", lm);
|
||||||
|
}
|
15
aufgaben/sheet9/sol3/map.rs
Executable file
15
aufgaben/sheet9/sol3/map.rs
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
macro_rules! hash_map {
|
||||||
|
( $($key:expr => $value:expr ,)* ) => {{
|
||||||
|
let mut map = ::std::collections::HashMap::new();
|
||||||
|
$( map.insert($key, $value); )*
|
||||||
|
map
|
||||||
|
}};
|
||||||
|
( $($key:expr => $value:expr),* ) => { hash_map!($($key => $value ,)*) };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let ages = hash_map!{ "Sabine" => 26, "Peter" => 32 };
|
||||||
|
println!("{:#?}", ages);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user