1
Fork 0

Expand fn keyword docs

This commit is contained in:
iirelu 2018-09-09 15:44:59 +02:00
parent f91ad440ef
commit a5c4a382b7

View file

@ -223,21 +223,73 @@ mod extern_keyword { }
#[doc(keyword = "fn")]
//
/// The `fn` keyword.
/// The keyword for defining functions.
///
/// The `fn` keyword is used to declare a function.
/// Functions are the primary way code is executed within Rust. Function blocks, usually just
/// called functions, can be defined in a variety of different places and be assigned many
/// different attributes and modifiers.
///
/// Example:
/// Standalone functions that just sit within a module not attached to anything else are common,
/// but most functions will end up being inside [`impl`] blocks, either on another type itself, or
/// as a trait impl for that type.
///
/// ```rust
/// fn some_function() {
/// // code goes in here
/// fn standalone_function() {
/// // code
/// }
///
/// pub fn public_thing(argument: bool) -> String {
/// // code
/// # "".to_string()
/// }
///
/// struct Thing {
/// foo: i32,
/// }
///
/// impl Thing {
/// pub fn new() -> Self {
/// Self {
/// foo: 42,
/// }
/// }
/// }
/// ```
///
/// For more information about functions, take a look at the [Rust Book][book].
/// See docs on [`impl`] and [`self`] for relevant details on those.
///
/// [book]: https://doc.rust-lang.org/book/second-edition/ch03-03-how-functions-work.html
/// In addition to presenting fixed types in the form of `fn name(arg: type, ..) -> return_type`,
/// functions can also declare a list of type parameters along with trait bounds that they fall
/// into.
///
/// ```rust
/// fn generic_function<T: Clone>(x: T) -> (T, T, T) {
/// (x.clone(), x.clone(), x.clone())
/// }
///
/// fn generic_where<T>(x: T) -> T
/// where T: std::ops::Add<Output=T> + Copy
/// {
/// x + x + x
/// }
/// ```
///
/// Declaring trait bounds in the angle brackets is functionally identical to using a [`where`]
/// clause, but `where` is preferred due to it being easier to understand at a glance.
///
/// Along with being made public via [`pub`], `fn` can also have an [`extern`] added for use in
/// FFI.
///
/// For more information on the various types of functions and how they're used, consult the [Rust
/// book] or the [Reference].
///
/// [`impl`]: keyword.impl.html
/// [`self`]: keyword.self.html
/// [`where`]: keyword.where.html
/// [`pub`]: keyword.pub.html
/// [`extern`]: keyword.extern.html
/// [Rust book]: https://doc.rust-lang.org/book/second-edition/ch03-03-how-functions-work.html
/// [Reference]: https://doc.rust-lang.org/reference/items/functions.html
mod fn_keyword { }
#[doc(keyword = "let")]