pub trait CallRef<Params>: CallMut<Params> {
    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

calls this function

Implementors