Small crate that provides a macro to create anonymous functions that can be used in const contexts.
It doesn't provide any new functionality, only syntax sugar.
Add it to your project
bash
cargo add const-anonymous-functions
```rust use constanonymousfunctions::caf;
const RESULT: i32 = caf!(|a: i32, b: i32| -> i32 { a + b })(1, 2);
assert_eq!(RESULT, 1 + 2); ```
There are a couple caveats to using this crate:
- You must always annotate the type of the function (both arguments and return type)
- To avoid confusion, you must always use braces in the function body, so something like |a: i32| a + 1
is not allowed (notice how it would be wrong either way since the return type here is ()
, so it doesn't return anything). |a: i32| -> i32 { a + 1 }
is the correct way to write it.
This macro is actually super basic. It just takes the closure syntax and transforms it into a const function. Then it returns the function.
So caf!(|a: i32, b: i32| -> i32 { a + b })
literally becomes:
```rust { const fn annon_caf(a: i32, b: i32) -> i32 { a + b }
__annon_caf__
}
```
That's it.