Mercurial > lbo > hg > memoize
view examples/patterns.rs @ 70:3adb990ef496
Release v0.2.1 with extended functionality from #10
Also fix minor issue in examples/patterns.rs.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 01 Jan 2022 12:32:21 +0100 |
parents | bf87b6014441 |
children | 528ce50ec228 |
line wrap: on
line source
use memoize::memoize; // Patterns in memoized function arguments must be bound by name. #[memoize] fn manhattan_distance(_p1 @ (x1, y1): (i32, i32), _p2 @ (x2, y2): (i32, i32)) -> i32 { (x1 - x2).abs() + (y1 - y2).abs() } #[derive(Clone, PartialEq, Eq, Hash)] enum OnlyOne { Value(i32), } #[memoize] fn get_value(_enum @ OnlyOne::Value(value): OnlyOne) -> i32 { value } fn main() { // `manhattan_distance` is only called once here. assert_eq!(manhattan_distance((1, 1), (1, 3)), 2); // Same with `get_value`. assert_eq!(get_value(OnlyOne::Value(0)), 0); }