diff options
| author | bors <bors@rust-lang.org> | 2016-07-27 02:26:37 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-07-27 02:26:37 -0700 |
| commit | 422ebd5328e485462c675af9304f3b5b86e5b893 (patch) | |
| tree | 35f53690722646ff39eddc7398feef0d2b2fe6d0 /src/libstd/sys/unix/os.rs | |
| parent | edecc57cbf4fb2444224c5c9492d58221ec885f0 (diff) | |
| parent | 1aa8dad854155221db7cec19b6105c673e4a871e (diff) | |
| download | rust-422ebd5328e485462c675af9304f3b5b86e5b893.tar.gz rust-422ebd5328e485462c675af9304f3b5b86e5b893.zip | |
Auto merge of #33312 - Byron:double-ended-iterator-for-args, r=alexcrichton
DoubleEndedIterator for Args
This PR implements the DoubleEndedIterator trait for the `std::env::Args[Os]` structure, as well
as the internal implementations.
It is primarily motivated by me, as I happened to implement a simple `reversor` program many times
now, which so far had to use code like this:
```Rust
for arg in std::env::args().skip(1).collect::<Vec<_>>().iter().rev() {}
```
... even though I would have loved to do this instead:
```Rust
for arg in std::env::args().skip(1).rev() {}
```
The latter is more natural, and I did not find a reason for not implementing it.
After all, on every system, the number of arguments passed to the program are known
at runtime.
To my mind, it follows KISS, and does not try to be smart at all. Also, there are no unit-tests,
primarily as I did not find any existing tests for the `Args` struct either.
The windows implementation is basically a copy-pasted variant of the `next()` method implementation,
and I could imagine sharing most of the code instead. Actually I would be happy if the reviewer would
ask for it.
Diffstat (limited to 'src/libstd/sys/unix/os.rs')
| -rw-r--r-- | src/libstd/sys/unix/os.rs | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libstd/sys/unix/os.rs b/src/libstd/sys/unix/os.rs index 63e13f0bb47..4c3558f91f5 100644 --- a/src/libstd/sys/unix/os.rs +++ b/src/libstd/sys/unix/os.rs @@ -317,6 +317,10 @@ impl ExactSizeIterator for Args { fn len(&self) -> usize { self.iter.len() } } +impl DoubleEndedIterator for Args { + fn next_back(&mut self) -> Option<OsString> { self.iter.next_back() } +} + /// Returns the command line arguments /// /// Returns a list of the command line arguments. |
