Trait CallRef

Source
pub trait CallRef<Params>: CallMut<Params> {
    // Required method
    fn ref_call_(&self, params: Params) -> Self::Returns;
}
Available on crate feature callable only.
Expand description

Implementable alternative to std::ops::Fn.

§Parameters

The Call* traits encode multiple parameters like this:

  • 0 parameters: by taking a () parameter, eg: foo.ref_call(()).

  • 1 parameters: by taking the single parameter, eg: foo.ref_call(10).

  • 2 or more parameters: by taking a tuple of the parameters, eg: foo.ref_call((10, 20)).

§Example

use core_extensions::{impl_call, CallExt};

struct MulBy<T>(T);

impl_call! { 
    fn ref_call[T](self: MulBy<T>, lhs: T ) -> T
    where[ T: Clone + std::ops::Mul<Output = T> ]
    {
        lhs * self.0.clone()
    }
}
 
let two = MulBy(2);
let seven = MulBy(7);
 
assert_eq!(two.ref_call(3), 6);
assert_eq!(two.ref_call(5), 10);
 
assert_eq!(seven.ref_call(3), 21);
assert_eq!(seven.ref_call(5), 35);
 

§Closure impls

Closures implement the Call* traits, and they always require a tuple of the parameters to be passed in.

use core_extensions::CallExt;

let fn_0 = || 10;
assert_eq!(fn_0.ref_call(()), 10);

let fn_1 = |a: i32| a + 10;
assert_eq!(fn_1.ref_call((5,)), 15);

let fn_2 = |a: i32, b: i32| a + b;
assert_eq!(fn_2.ref_call((8, 13)), 21);

Required Methods§

Source

fn ref_call_(&self, params: Params) -> Self::Returns

calls this function

Implementors§

Source§

impl<A, B, C, D, E, F, Func, Ret> CallRef<(A, B, C, D, E, F)> for Func
where Func: Fn(A, B, C, D, E, F) -> Ret,

Source§

impl<A, B, C, D, E, F, G, Func, Ret> CallRef<(A, B, C, D, E, F, G)> for Func
where Func: Fn(A, B, C, D, E, F, G) -> Ret,

Source§

impl<A, B, C, D, E, F, G, H, Func, Ret> CallRef<(A, B, C, D, E, F, G, H)> for Func
where Func: Fn(A, B, C, D, E, F, G, H) -> Ret,

Source§

impl<A, B, C, D, E, F, G, H, I, Func, Ret> CallRef<(A, B, C, D, E, F, G, H, I)> for Func
where Func: Fn(A, B, C, D, E, F, G, H, I) -> Ret,

Source§

impl<A, B, C, D, E, F, G, H, I, J, Func, Ret> CallRef<(A, B, C, D, E, F, G, H, I, J)> for Func
where Func: Fn(A, B, C, D, E, F, G, H, I, J) -> Ret,

Source§

impl<A, B, C, D, E, F, G, H, I, J, K, Func, Ret> CallRef<(A, B, C, D, E, F, G, H, I, J, K)> for Func
where Func: Fn(A, B, C, D, E, F, G, H, I, J, K) -> Ret,

Source§

impl<A, B, C, D, E, F, G, H, I, J, K, L, Func, Ret> CallRef<(A, B, C, D, E, F, G, H, I, J, K, L)> for Func
where Func: Fn(A, B, C, D, E, F, G, H, I, J, K, L) -> Ret,

Source§

impl<A, B, C, D, E, Func, Ret> CallRef<(A, B, C, D, E)> for Func
where Func: Fn(A, B, C, D, E) -> Ret,

Source§

impl<A, B, C, D, Func, Ret> CallRef<(A, B, C, D)> for Func
where Func: Fn(A, B, C, D) -> Ret,

Source§

impl<A, B, C, Func, Ret> CallRef<(A, B, C)> for Func
where Func: Fn(A, B, C) -> Ret,

Source§

impl<A, B, Func, Ret> CallRef<(A, B)> for Func
where Func: Fn(A, B) -> Ret,

Source§

impl<A, Func, Ret> CallRef<(A,)> for Func
where Func: Fn(A) -> Ret,

Source§

impl<F, Ret> CallRef<()> for F
where F: Fn() -> Ret,