bool - Rust
Expand description
The boolean type.
The bool
represents a value, which could only be either true
or false
. If you cast
a bool
into an integer, true
will be 1 and false
will be 0.
§ Basic usage
bool
implements various traits, such as BitAnd
, BitOr
, Not
, etc.,
which allow us to perform boolean operations using &
, |
and !
.
if
requires a bool
value as its conditional. assert!
, which is an
important macro in testing, checks whether an expression is true
and panics
if it isn’t.
let bool_val = true & false | false;
assert!(!bool_val);
§ Examples
A trivial example of the usage of bool
:
let praise_the_borrow_checker = true;
// using the `if` conditional
if praise_the_borrow_checker {
println!("oh, yeah!");
} else {
println!("what?!!");
}
// ... or, a match pattern
match praise_the_borrow_checker {
true => println!("keep praising!"),
false => println!("you should praise!"),
}
Also, since bool
implements the Copy
trait, we don’t
have to worry about the move semantics (just like the integer and float primitives).
Now an example of bool
cast to integer type:
assert_eq!(true as i32, 1);
assert_eq!(false as i32, 0);
1.62.0 · Source
Returns Some(t)
if the bool
is true
,
or None
otherwise.
Arguments passed to then_some
are eagerly evaluated; if you are
passing the result of a function call, it is recommended to use
then
, which is lazily evaluated.
§ Examples
assert_eq!(false.then_some(0), None);
assert_eq!(true.then_some(0), Some(0));
let mut a = 0;
let mut function_with_side_effects = || { a += 1; };
true.then_some(function_with_side_effects());
false.then_some(function_with_side_effects());
// `a` is incremented twice because the value passed to `then_some` is
// evaluated eagerly.
assert_eq!(a, 2);
1.50.0 · Source
Returns Some(f())
if the bool
is true
,
or None
otherwise.
§ Examples
assert_eq!(false.then(|| 0), None);
assert_eq!(true.then(|| 0), Some(0));
let mut a = 0;
true.then(|| { a += 1; });
false.then(|| { a += 1; });
// `a` is incremented once because the closure is evaluated lazily by
// `then`.
assert_eq!(a, 1);
Source
🔬This is a nightly-only experimental API. ( select_unpredictable
#133962)
Returns either true_val
or false_val
depending on the value of
self
, with a hint to the compiler that self
is unlikely
to be correctly predicted by a CPU’s branch predictor.
This method is functionally equivalent to
ⓘ
fn select_unpredictable<T>(b: bool, true_val: T, false_val: T) -> T {
if b { true_val } else { false_val }
}
but might generate different assembly. In particular, on platforms with
a conditional move or select instruction (like cmov
on x86 or csel
on ARM) the optimizer might use these instructions to avoid branches,
which can benefit performance if the branch predictor is struggling
with predicting condition
, such as in an implementation of binary
search.
Note however that this lowering is not guaranteed (on any platform) and
should not be relied upon when trying to write constant-time code. Also
be aware that this lowering might decrease performance if condition
is well-predictable. It is advisable to perform benchmarks to tell if
this function is useful.
§ Examples
Distribute values evenly between two buckets:
#![feature(select_unpredictable)]
use std::hash::BuildHasher;
fn append<H: BuildHasher>(hasher: &H, v: i32, bucket_one: &mut Vec<i32>, bucket_two: &mut Vec<i32>) {
let hash = hasher.hash_one(&v);
let bucket = (hash % 2 == 0).select_unpredictable(bucket_one, bucket_two);
bucket.push(v);
}
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
The resulting type after applying the &
operator.
1.22.0 · Source §Source §1.8.0 · Source §1.0.0 · Source §
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
The resulting type after applying the |
operator.
1.22.0 · Source §Source §1.8.0 · Source §1.0.0 · Source §
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
The resulting type after applying the ^
operator.
1.22.0 · Source §Source §1.8.0 · Source §1.0.0 · Source §1.0.0 · Source §1.0.0 · Source §
Returns the default value of false
Source §
🔬This is a nightly-only experimental API. ( core_intrinsics_fallbacks
)
See super::disjoint_bitor
; we just need the trait indirection to handle
different types since calling intrinsics with generics doesn’t work.
1.0.0 · Source §1.24.0 · Source §
Converts a bool
into an AtomicBool
.
§ Examples
use std::sync::atomic::AtomicBool;
let atomic_bool = AtomicBool::from(true);
assert_eq!(format!("{atomic_bool:?}"), "true")
Converts a bool
to f32
losslessly.
The resulting value is positive 0.0
for false
and 1.0
for true
values.
§ Examples
let x: f32 = false.into();
assert_eq!(x, 0.0);
assert!(x.is_sign_positive());
let y: f32 = true.into();
assert_eq!(y, 1.0);
Converts a bool
to f64
losslessly.
The resulting value is positive 0.0
for false
and 1.0
for true
values.
§ Examples
let x: f64 = false.into();
assert_eq!(x, 0.0);
assert!(x.is_sign_positive());
let y: f64 = true.into();
assert_eq!(y, 1.0);
Converts a bool
to i128
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(i128::from(true), 1);
assert_eq!(i128::from(false), 0);
Converts a bool
to i16
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(i16::from(true), 1);
assert_eq!(i16::from(false), 0);
Converts a bool
to i32
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(i32::from(true), 1);
assert_eq!(i32::from(false), 0);
Converts a bool
to i64
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(i64::from(true), 1);
assert_eq!(i64::from(false), 0);
Converts a bool
to i8
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(i8::from(true), 1);
assert_eq!(i8::from(false), 0);
Converts a bool
to isize
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(isize::from(true), 1);
assert_eq!(isize::from(false), 0);
Converts a bool
to u128
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(u128::from(true), 1);
assert_eq!(u128::from(false), 0);
Converts a bool
to u16
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(u16::from(true), 1);
assert_eq!(u16::from(false), 0);
Converts a bool
to u32
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(u32::from(true), 1);
assert_eq!(u32::from(false), 0);
Converts a bool
to u64
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(u64::from(true), 1);
assert_eq!(u64::from(false), 0);
Converts a bool
to u8
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(u8::from(true), 1);
assert_eq!(u8::from(false), 0);
Converts a bool
to usize
losslessly.
The resulting value is 0
for false
and 1
for true
values.
§ Examples
assert_eq!(usize::from(true), 1);
assert_eq!(usize::from(false), 0);
Parse a bool
from a string.
The only accepted values are "true"
and "false"
. Any other input
will return an error.
§ Examples
use std::str::FromStr;
assert_eq!(FromStr::from_str("true"), Ok(true));
assert_eq!(FromStr::from_str("false"), Ok(false));
assert!(<bool as FromStr>::from_str("not even a boolean").is_err());
Note, in many cases, the .parse()
method on str
is more proper.
assert_eq!("true".parse(), Ok(true));
assert_eq!("false".parse(), Ok(false));
assert!("not even a boolean".parse::<bool>().is_err());
The associated error which can be returned from parsing.
1.0.0 · Source §1.0.0 · Source §1.0.0 · Source §1.0.0 · Source §1.0.0 · Source §
Tests for self
and other
values to be equal, and is used by ==
.
Tests for !=
. The default implementation is almost always sufficient,
and should not be overridden without very good reason.
This method returns an ordering between self
and other
values if one exists. Read more
Tests less than (for self
and other
) and is used by the <
operator. Read more
Tests less than or equal to (for self
and other
) and is used by the
<=
operator. Read more
Tests greater than (for self
and other
) and is used by the >
operator. Read more
Tests greater than or equal to (for self
and other
) and is used by
the >=
operator. Read more
Source §
🔬This is a nightly-only experimental API. ( random
#130703)
Generates a random value.