Trait wyz::tap::TapBorrow [−][src]
Borrowing Tap
This trait runs the Borrow
or BorrowMut
trait on the caller, and passes
the borrowed output of it to the action. This permits passing methods defined on
a supertype to the tap of a subtype.
Because a type may implement Borrow
multiple times, the function passed to
.tap_borrow
must specify its argument type. This can be done by providing the
name of an explicitly typed function, or by typing a closure’s argument.
Examples
use wyz::tap::{Tap, TapBorrow}; let v = vec![5, 1, 4, 2, 3] .tap_borrow_mut(<[i32]>::sort) .tap_mut(|v| v.reverse()); assert_eq!(&v, &[5, 4, 3, 2, 1]);
tap_mut
on a Vec<T>
cannot call functions defined in impl [T]
;
tap_borrow_mut
can, because Vec<T>
implements Borrow<[T]>
.
Provided methods
fn tap_borrow<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
R: Sized,
[src]
Self: Borrow<T>,
F: FnOnce(&T) -> R,
R: Sized,
Provides immutable access to the borrow for inspection.
This calls <Self as Borrow<T>>::borrow
on self
, and calls func
on
the resulting borrow.
Examples
use std::rc::Rc; use wyz::tap::TapBorrow; let mut len = 0; let text = Rc::<str>::from("hello") .tap_borrow(|s: &str| len = s.len());
fn tap_borrow_dbg<F, R>(self, func: F) -> Self where
Self: Borrow<T>,
F: FnOnce(&T) -> R,
R: Sized,
[src]
Self: Borrow<T>,
F: FnOnce(&T) -> R,
R: Sized,
Calls tap_borrow
in debug builds, and does nothing in release builds.
fn tap_borrow_mut<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
R: Sized,
[src]
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
R: Sized,
Provides mutable access to the borrow for modification.
fn tap_borrow_mut_dbg<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
R: Sized,
[src]
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
R: Sized,
Calls tap_borrow_mut
in debug builds, and does nothing in release
builds.