1. 54
    Rustlings iterators3: Iterating and collecting values using the IntoIter trait
    2m 9s

Rustlings iterators3: Iterating and collecting values using the IntoIter trait

Chris Biscardi
InstructorChris Biscardi
Share this video with your friends

Social Share Links

Send Tweet
Published 4 years ago
Updated 3 years ago

README for this exercise.

into_iter is an implementation of the IntoIter trait for vectors. In this case the implementation calls out to iter() under the hood.

Chris Biscardi: [0:00] In iterators3, we need to both complete the divide() function to get the first four tests to pass. Then uncomment the last two tests and fill in values for x in the last few tests using the division_results in those two tests.

[0:13] We'll start with the divide() function. The divide() function is a public function that takes two integers and returns a result that is either an integer or a DivisionError. You could see that DivisionError is defined in the same file and as an enum that can either be NotDivisible with an argument of NotDivisibleError or DividedByZero Err.

[0:31] In addition, the comment above the divide() function says that we should calculate 'a' divided by 'b' only if 'a' is evenly divisible by 'b'. Otherwise, it should return a suitable error. First, we can test the if b == . If it is, then we need to return an Err(DivisionError: :DividedByZero). Otherwise, if a is divisible by b, with no remainder, we can return the division of a/b.

[0:54] Finally, if neither of those count, we can return a DivisionError. The DivisionError takes a struct, but as a non-divisible error of the dividend and the divisor.

[1:04] Now that we've passed the first four tests, we'll pass the next two. We'll uncomment the second to last test and fill an x here. Now that we have numbers which are a vec! Of four different numbers, and we have division_results in which we take numbers, which we put into an iterator, and then map over with our divide() function.

[1:21] This leaves us with division_results which is delimiter, so we know we need to collect it. If we look at the assert_eq!, we can see that we're expecting a result type that wraps the values that were divided. We want a result that is either a Vec of i32s or the error type.

[1:36] We know this is the return value because this is the return value that divide gives us, except for the fact that the i32 are not in a vector when we turn it from divide. They're in a vector now because we operated over a vector, so divide was applied to each individual number. The type Result which can either return a vector by i32s that we divided over or over DivisionError.

[1:57] We can do the same thing for the last test using the same code, but this time, the return type is different. Here we have a Vec of Result types. What we need to do here is pull the Vec out and collect. We'll know how to collect this into it, and our tests are passing.

egghead
egghead
~ just now

Member comments are a way for members to communicate, interact, and ask questions about a lesson.

The instructor or someone from the community might respond to your question Here are a few basic guidelines to commenting on egghead.io

Be on-Topic

Comments are for discussing a lesson. If you're having a general issue with the website functionality, please contact us at support@egghead.io.

Avoid meta-discussion

  • This was great!
  • This was horrible!
  • I didn't like this because it didn't match my skill level.
  • +1 It will likely be deleted as spam.

Code Problems?

Should be accompanied by code! Codesandbox or Stackblitz provide a way to share code and discuss it in context

Details and Context

Vague question? Vague answer. Any details and context you can provide will lure more interesting answers!

Markdown supported.
Become a member to join the discussionEnroll Today