Skip to content

Instantly share code, notes, and snippets.

struct Defer<F: FnOnce()>(Option<F>);
impl<F: FnOnce()> Drop for Defer<F> { fn drop(&mut self) { self.0.take().unwrap()(); } }
pub fn y_defer<F: FnOnce()>(f: F) -> impl Drop { Defer(Some(f)) }
#[macro_export]
macro_rules! defer { ($f:expr) => { $crate::y_defer(|| $f); }; }
#[test]
@normal8781
normal8781 / linq.rs
Last active January 29, 2022 07:03
#[macro_export]
macro_rules! linq {
(from $r:ident in $d:ident; select $s:expr;) =>
{ $d.map(|$r| $s) };
(from $r:ident in $d:ident; $(where $w:expr;)* select $s:expr;)
=> { $d.filter(|&$r| (true $(&$w)*)).map(|$r| $s) };
}
fn main() {
let x = [1, 2, 3, 4, 5, 6, 7, 8, 9].iter();