diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2013-08-13 23:08:14 +1000 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2013-08-15 01:10:45 +1000 |
| commit | 53487a02467ebe8816a3bdf03f16c3db958958a2 (patch) | |
| tree | 8d4a4aec4d1260579373f856ecfce70233538a71 /src/libstd/vec.rs | |
| parent | 58021be45441efc6bf0a10eb58a407f74e9eaed0 (diff) | |
| download | rust-53487a02467ebe8816a3bdf03f16c3db958958a2.tar.gz rust-53487a02467ebe8816a3bdf03f16c3db958958a2.zip | |
std: Move the iterator param on FromIterator and Extendable to the method.
If they are on the trait then it is extremely annoying to use them as
generic parameters to a function, e.g. with the iterator param on the trait
itself, if one was to pass an Extendable<int> to a function that filled it
either from a Range or a Map<VecIterator>, one needs to write something
like:
fn foo<E: Extendable<int, Range<int>> +
Extendable<int, Map<&'self int, int, VecIterator<int>>>
(e: &mut E, ...) { ... }
since using a generic, i.e. `foo<E: Extendable<int, I>, I: Iterator<int>>`
means that `foo` takes 2 type parameters, and the caller has to specify them
(which doesn't work anyway, as they'll mismatch with the iterators used in
`foo` itself).
This patch changes it to:
fn foo<E: Extendable<int>>(e: &mut E, ...) { ... }
Diffstat (limited to 'src/libstd/vec.rs')
| -rw-r--r-- | src/libstd/vec.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index 27e09d85479..1996a9f970d 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -2316,8 +2316,8 @@ impl<T> Iterator<T> for MoveRevIterator<T> { } } -impl<A, T: Iterator<A>> FromIterator<A, T> for ~[A] { - fn from_iterator(iterator: &mut T) -> ~[A] { +impl<A> FromIterator<A> for ~[A] { + fn from_iterator<T: Iterator<A>>(iterator: &mut T) -> ~[A] { let (lower, _) = iterator.size_hint(); let mut xs = with_capacity(lower); for x in *iterator { @@ -2327,8 +2327,8 @@ impl<A, T: Iterator<A>> FromIterator<A, T> for ~[A] { } } -impl<A, T: Iterator<A>> Extendable<A, T> for ~[A] { - fn extend(&mut self, iterator: &mut T) { +impl<A> Extendable<A> for ~[A] { + fn extend<T: Iterator<A>>(&mut self, iterator: &mut T) { let (lower, _) = iterator.size_hint(); let len = self.len(); self.reserve(len + lower); |
