Skip to content

Commit

Permalink
auto merge of rust-lang#17455 : steveklabnik/rust/document_default, r…
Browse files Browse the repository at this point in the history
…=alexcrichton

Given that the `Default` module is now stable, it might as well get good docs.
  • Loading branch information
bors committed Sep 25, 2014
2 parents 58413c0 + 03b96d1 commit 3f8da69
Showing 1 changed file with 108 additions and 3 deletions.
111 changes: 108 additions & 3 deletions src/libcore/default.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,104 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

//! The `Default` trait for types which may have meaningful default values
//! The `Default` trait for types which may have meaningful default values.
//!
//! Sometimes, you want to fall back to some kind of default value, and
//! don't particularly care what it is. This comes up often with `struct`s
//! that define a set of options:
//!
//! ```
//! struct SomeOptions {
//! foo: int,
//! bar: f32,
//! }
//! ```
//!
//! How can we define some default values? You can use `Default`:
//!
//! ```
//! use std::default::Default;
//!
//! #[deriving(Default)]
//! struct SomeOptions {
//! foo: int,
//! bar: f32,
//! }
//!
//!
//! fn main() {
//! let options: SomeOptions = Default::default();
//! }
//! ```
//!
//! Now, you get all of the default values. Rust implements `Default` for various primitives types.
//! If you have your own type, you need to implement `Default` yourself:
//!
//! ```
//! use std::default::Default;
//!
//! enum Kind {
//! A,
//! B,
//! C,
//! }
//!
//! impl Default for Kind {
//! fn default() -> Kind { A }
//! }
//!
//! #[deriving(Default)]
//! struct SomeOptions {
//! foo: int,
//! bar: f32,
//! baz: Kind,
//! }
//!
//!
//! fn main() {
//! let options: SomeOptions = Default::default();
//! }
//! ```
//!
//! If you want to override a particular option, but still retain the other defaults:
//!
//! ```
//! # use std::default::Default;
//! # #[deriving(Default)]
//! # struct SomeOptions {
//! # foo: int,
//! # bar: f32,
//! # }
//! fn main() {
//! let options = SomeOptions { foo: 42, ..Default::default() };
//! }
//! ```

#![stable]

/// A trait that types which have a useful default value should implement.
///
/// A struct can derive default implementations of `Default` for basic types using
/// `#[deriving(Default)]`.
///
/// # Examples
///
/// ```
/// #[deriving(Default)]
/// struct SomeOptions {
/// foo: int,
/// bar: f32,
/// }
/// ```
pub trait Default {
/// Return the "default value" for a type.
/// Returns the "default value" for a type.
///
/// # Example
/// Default values are often some kind of initial value, identity value, or anything else that
/// may make sense as a default.
///
/// # Examples
///
/// Using built-in default values:
///
/// ```
/// use std::default::Default;
Expand All @@ -25,6 +114,22 @@ pub trait Default {
/// let (x, y): (Option<String>, f64) = Default::default();
/// let (a, b, (c, d)): (int, uint, (bool, bool)) = Default::default();
/// ```
///
/// Making your own:
///
/// ```
/// use std::default::Default;
///
/// enum Kind {
/// A,
/// B,
/// C,
/// }
///
/// impl Default for Kind {
/// fn default() -> Kind { A }
/// }
/// ```
fn default() -> Self;
}

Expand Down

0 comments on commit 3f8da69

Please sign in to comment.