Types
Scalar types integer, float, bool, char
Compound types tuple and array.
Tuple
#![allow(unused)] fn main() { let tup: (i32, f64, u8) = (500, 6.4, 1); let five_hundred = x.0; }
Values accessed by zero based indexing.
Array
#![allow(unused)] fn main() { let a: [i32; 5] = [1,2,3,4,5]; let a: [i32; 5] = [0; 5]; let last = a[4]; }
Fixed size. Stack allocated. Zero based indexing without the .
.
Can be mutated.
#![allow(unused)] fn main() { let mut a = [1,2,3,4,5]; a[4] = 0; }
Can be sliced (range end is exclusive or inclusive (=i
)).
#![allow(unused)] fn main() { let mut a = [1,2,3,4,5]; let b = &a[0..=4]; //whole array }
Vector
Resizable generic collection.
#![allow(unused)] fn main() { let mut my_vec: Vec<String> = Vec::new(); my_vec.push(name1); my_vec.push(name2); }
Can also declare with a macro:
#![allow(unused)] fn main() { let mut some_numbers = vec![4,5,6]; }
Can slice:
#![allow(unused)] fn main() { &some_numbers[0..] }
Or declare with a size:
#![allow(unused)] fn main() { let mut letters: Vec<char> = Vec::with_capacity(8); println!("{}", letters.capacity()); }
Enumerations
#![allow(unused)] fn main() { enum ThingsInTheSky { Sun, Stars, } ThingsInTheSky::Sun }
Values can have values, thus they are discriminated unions.
#![allow(unused)] fn main() { enum Feature { Note(u8), Rest(duration: u8), } let sound = Feature::Note(7); let no_sound = Feature::Rest(250); }
and they can have static functions and methods:
#![allow(unused)] fn main() { impl Feature { fun play(&self) {} fun new_rest(duration: u8) -> Self { Feature::Rest { duration } } } }