mirror of
https://github.com/bevyengine/bevy
synced 2025-01-02 08:18:59 +00:00
Added module-level docs for function overloading
This commit is contained in:
parent
f4d8c2f16a
commit
c2a18d593f
1 changed files with 30 additions and 0 deletions
|
@ -94,6 +94,32 @@
|
||||||
//! For other functions that don't conform to one of the above signatures,
|
//! For other functions that don't conform to one of the above signatures,
|
||||||
//! [`DynamicFunction`] and [`DynamicFunctionMut`] can instead be created manually.
|
//! [`DynamicFunction`] and [`DynamicFunctionMut`] can instead be created manually.
|
||||||
//!
|
//!
|
||||||
|
//! # Generic Functions
|
||||||
|
//!
|
||||||
|
//! In Rust, generic functions are [monomophized] by the compiler,
|
||||||
|
//! which means that a separate copy of the function is generated for each concrete set of type parameters.
|
||||||
|
//!
|
||||||
|
//! When converting a generic function to a [`DynamicFunction`] or [`DynamicFunctionMut`],
|
||||||
|
//! the function must be manually monomorphized with concrete types.
|
||||||
|
//! In other words, you cannot write `add<T>.into_function()`.
|
||||||
|
//! Instead, you will need to write `add::<i32>.into_function()`.
|
||||||
|
//!
|
||||||
|
//! This means that reflected functions cannot be generic themselves.
|
||||||
|
//! To get around this limitation, you can consider [overloading] your function with multiple concrete types.
|
||||||
|
//!
|
||||||
|
//! # Overloading Functions
|
||||||
|
//!
|
||||||
|
//! Both [`DynamicFunction`] and [`DynamicFunctionMut`] support [function overloading].
|
||||||
|
//!
|
||||||
|
//! Function overloading allows one function to handle multiple types of arguments.
|
||||||
|
//! This is useful for simulating generic functions by having an overload for each known concrete type.
|
||||||
|
//! Additionally, it can also simulate [variadic functions]: functions that can be called with a variable number of arguments.
|
||||||
|
//!
|
||||||
|
//! Internally, this works by storing multiple functions in a map,
|
||||||
|
//! where each function is associated with a specific argument signature.
|
||||||
|
//!
|
||||||
|
//! To learn more, see the docs on [`DynamicFunction::with_overload`].
|
||||||
|
//!
|
||||||
//! # Function Registration
|
//! # Function Registration
|
||||||
//!
|
//!
|
||||||
//! This module also provides a [`FunctionRegistry`] that can be used to register functions and closures
|
//! This module also provides a [`FunctionRegistry`] that can be used to register functions and closures
|
||||||
|
@ -127,6 +153,10 @@
|
||||||
//! [`Reflect`]: crate::Reflect
|
//! [`Reflect`]: crate::Reflect
|
||||||
//! [lack of variadic generics]: https://poignardazur.github.io/2024/05/25/report-on-rustnl-variadics/
|
//! [lack of variadic generics]: https://poignardazur.github.io/2024/05/25/report-on-rustnl-variadics/
|
||||||
//! [coherence issues]: https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#coherence-leak-check
|
//! [coherence issues]: https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#coherence-leak-check
|
||||||
|
//! [monomophized]: https://en.wikipedia.org/wiki/Monomorphization
|
||||||
|
//! [overloading]: #overloading-functions
|
||||||
|
//! [function overloading]: https://en.wikipedia.org/wiki/Function_overloading
|
||||||
|
//! [variadic functions]: https://en.wikipedia.org/wiki/Variadic_function
|
||||||
|
|
||||||
pub use args::{ArgError, ArgList, ArgValue};
|
pub use args::{ArgError, ArgList, ArgValue};
|
||||||
pub use dynamic_function::*;
|
pub use dynamic_function::*;
|
||||||
|
|
Loading…
Reference in a new issue