Struct turtle::Speed
[−]
[src]
pub struct Speed(_);
Represents both the movement and rotation speed of the turtle.
Creating Speeds
You can create a Speed
value by converting either strings or numbers.
// This value is of type `Speed` and it is converted from an `i32` let speed: Speed = 1.into(); // This value is of type `Speed` and it is converted from a `&str` let slowest_speed: Speed = "slowest".into();
There is no need to call .into()
when passing a speed into the set_speed
method.
See the set_speed
method for more information about how that works.
let mut turtle = Turtle::new(); turtle.set_speed(22); // Same as `turtle.set_speed(22.into())`
The minimum speed value is 1 and the maximum speed value (currently) is 25.
Trying to set the speed to a value out of that range will cause a panic.
let mut turtle = Turtle::new(); turtle.set_speed(26); // panic!
While the minimum speed will not change, the maximum speed may grow larger if the need arises. That is why we chose to panic for invalid speeds instead of defaulting to another value.
String Conversion
Strings are converted as follows:
String | Value |
---|---|
"slowest" | 1 |
"slower" | 5 |
"slow" | 8 |
"normal" | 10 |
"fast" | 12 |
"faster" | 15 |
"instant" | see below |
You can use strings to create Speed
values in the same way numbers were used above. Each of
the following is an equivalent way to set the speed to 5
:
turtle.set_speed(5); turtle.set_speed("slower"); turtle.set_speed(Speed::from(5)); // Not recommended! turtle.set_speed(Speed::from("slower")); // Not recommended!
Instant
There is one special speed value "instant"
which makes it so that movement and rotation
are not animated at all. Instead, the turtle immediately moves and rotates to the position that
you directed it to. It will still draw along the way if its pen is down.
let mut turtle = Turtle::new(); turtle.set_speed("instant"); turtle.forward(100.0); // A line will be drawn instantly!
Comparing Speed Values
Speed
values can be compared for equality with i32
values. This is a little more convenient
than converting the i32
to Speed
every time you want to make a comparison.
let speed: Speed = 1.into(); // Speed values can be compared to integers assert_eq!(speed, 1); // This is equivalent to the following assert_eq!(speed, Speed::from(1)); // This value is of type `Speed` and it is converted from a `&str` let speed: Speed = "slowest".into(); // Speed values can be compared to other speed values assert_eq!(speed, Speed::from("slowest")); // This is equivalent to the following since the slowest speed is 1 assert_eq!(speed, 1);
You can use the <
, <=
, ==
, >=
, >
with Speed
values and i32
values (or other
Speed
values).
let turtle = Turtle::new(); let speed = turtle.speed(); if speed == 12 && speed >= 5 && speed < Speed::instant() { println!("Super fast!!"); } // This is equivalent, but requires more typing if speed == Speed::from(12) && speed >= Speed::from(5) && speed < Speed::from("instant") { println!("Super fast!!"); }
Notice that you can compare Speed
values to numeric values, but not the other way around.
let speed: Speed = 7.into(); if 8 > speed { // This doesn't make sense and won't compile! // ... }
To check if a speed is instant, use the is_instant()
method or compare the speed to
Speed::instant()
.
let speed = Speed::instant(); if speed.is_instant() { println!("Instant!!"); }
Methods
impl Speed
[src]
pub fn instant() -> Self
[src]
Returns the speed value that will make the turtle move and rotate instantly. This means that instead of the turtle's movements being animated, it will directly move to wherever you direct it to go.
let mut turtle = Turtle::new(); turtle.set_speed(Speed::instant()); turtle.forward(100.0); // A line will be drawn instantly!
Whenever possible, you should prefer to use the string "instant"
instead of calling this
method.
turtle.set_speed("instant"); // equivalent to typing `Speed::instant()`
pub fn is_instant(self) -> bool
[src]
Returns true if this speed is the same as Speed::instant()
use turtle::{Speed}; let speed: Speed = "instant".into(); assert!(speed.is_instant()); let speed = Speed::instant(); assert!(speed.is_instant());
Trait Implementations
impl Debug for Speed
[src]
fn fmt(&self, __arg_0: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more
impl Clone for Speed
[src]
fn clone(&self) -> Speed
[src]
Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
Performs copy-assignment from source
. Read more
impl Copy for Speed
[src]
impl PartialEq for Speed
[src]
fn eq(&self, __arg_0: &Speed) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, __arg_0: &Speed) -> bool
[src]
This method tests for !=
.
impl Eq for Speed
[src]
impl PartialOrd for Speed
[src]
fn partial_cmp(&self, __arg_0: &Speed) -> Option<Ordering>
[src]
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, __arg_0: &Speed) -> bool
[src]
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, __arg_0: &Speed) -> bool
[src]
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, __arg_0: &Speed) -> bool
[src]
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, __arg_0: &Speed) -> bool
[src]
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl Ord for Speed
[src]
fn cmp(&self, __arg_0: &Speed) -> Ordering
[src]
This method returns an Ordering
between self
and other
. Read more
fn max(self, other: Self) -> Self
1.21.0[src]
Compares and returns the maximum of two values. Read more
fn min(self, other: Self) -> Self
1.21.0[src]
Compares and returns the minimum of two values. Read more
impl Hash for Speed
[src]
fn hash<__H: Hasher>(&self, __arg_0: &mut __H)
[src]
Feeds this value into the given [Hasher
]. Read more
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
Feeds a slice of this type into the given [Hasher
]. Read more
impl Display for Speed
[src]
fn fmt(&self, f: &mut Formatter) -> Result
[src]
Formats the value using the given formatter. Read more
impl PartialEq<i32> for Speed
[src]
fn eq(&self, other: &i32) -> bool
[src]
This method tests for self
and other
values to be equal, and is used by ==
. Read more
fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests for !=
.
impl PartialOrd<i32> for Speed
[src]
fn partial_cmp(&self, other: &i32) -> Option<Ordering>
[src]
This method returns an ordering between self
and other
values if one exists. Read more
fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests less than (for self
and other
) and is used by the <
operator. Read more
fn le(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
This method tests greater than or equal to (for self
and other
) and is used by the >=
operator. Read more
impl Rand for Speed
[src]
fn rand<R: Rng>(rng: &mut R) -> Self
[src]
Generates a random instance of this type using the specified source of randomness. Read more