Skip to content

Instantly share code, notes, and snippets.

@ukitaka
Created September 5, 2017 15:02
Show Gist options
  • Save ukitaka/e38a60a32829dd03920dc333a0aa2fcc to your computer and use it in GitHub Desktop.
Save ukitaka/e38a60a32829dd03920dc333a0aa2fcc to your computer and use it in GitHub Desktop.
take.rs
#[test]
fn take_works_well() {
let a: &[i32] = &[1,2,3];
let t = a.take(2);
assert_eq!(t.len(), 2);
assert_eq!(t[0], 1);
assert_eq!(t[1], 2);
}
#[test]
fn take_last_works_well() {
let a: &[i32] = &[1,2,3];
let t = a.take_last(2);
assert_eq!(t.len(), 2);
assert_eq!(t[0], 2);
assert_eq!(t[1], 3);
}
trait Take<T> {
fn take(&self, n: usize) -> &[T];
fn take_last(&self, n: usize) -> &[T];
}
impl<T> Take<T> for [T] {
fn take(&self, n: usize) -> &[T] {
return &self[0..n];
}
fn take_last(&self, n: usize) -> &[T] {
let len = self.len();
return &self[(len-n)..len];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment