De-mode vec::each() and many of the str iteration routines
Note that the method foo.each() is not de-moded, nor the other vec routines.
This commit is contained in:
parent
62b7f4d800
commit
9cf271fe96
81 changed files with 556 additions and 750 deletions
|
|
@ -2,21 +2,23 @@
|
|||
// making method calls, but only if there aren't any matches without
|
||||
// it.
|
||||
|
||||
#[legacy_modes];
|
||||
|
||||
trait iterable<A> {
|
||||
fn iterate(blk: fn(A) -> bool);
|
||||
fn iterate(blk: fn(x: &A) -> bool);
|
||||
}
|
||||
|
||||
impl<A> &[A]: iterable<A> {
|
||||
fn iterate(f: fn(A) -> bool) {
|
||||
vec::each(self, f);
|
||||
fn iterate(f: fn(x: &A) -> bool) {
|
||||
for vec::each(self) |e| {
|
||||
if !f(e) { break; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<A> ~[A]: iterable<A> {
|
||||
fn iterate(f: fn(A) -> bool) {
|
||||
vec::each(self, f);
|
||||
fn iterate(f: fn(x: &A) -> bool) {
|
||||
for vec::each(self) |e| {
|
||||
if !f(e) { break; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -29,7 +31,7 @@ fn length<A, T: iterable<A>>(x: T) -> uint {
|
|||
fn main() {
|
||||
let x = ~[0,1,2,3];
|
||||
// Call a method
|
||||
for x.iterate() |y| { assert x[y] == y; }
|
||||
for x.iterate() |y| { assert x[*y] == *y; }
|
||||
// Call a parameterized function
|
||||
assert length(x) == vec::len(x);
|
||||
// Call a parameterized function, with type arguments that require
|
||||
|
|
@ -39,7 +41,7 @@ fn main() {
|
|||
// Now try it with a type that *needs* to be borrowed
|
||||
let z = [0,1,2,3]/_;
|
||||
// Call a method
|
||||
for z.iterate() |y| { assert z[y] == y; }
|
||||
for z.iterate() |y| { assert z[*y] == *y; }
|
||||
// Call a parameterized function
|
||||
assert length::<int, &[int]>(z) == vec::len(z);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
fn main() {
|
||||
let mut sum = 0;
|
||||
for vec::each(~[1, 2, 3, 4, 5]) |x| { sum += x; }
|
||||
for vec::each(~[1, 2, 3, 4, 5]) |x| {
|
||||
sum += *x;
|
||||
}
|
||||
assert (sum == 15);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,8 +3,8 @@ fn main() {
|
|||
let v = ~[-1f, 0f, 1f, 2f, 3f];
|
||||
|
||||
// Statement form does not require parentheses:
|
||||
do vec::iter(v) |i| {
|
||||
log(info, i);
|
||||
for vec::each(v) |i| {
|
||||
log(info, *i);
|
||||
}
|
||||
|
||||
// Usable at all:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
fn want_slice(v: &[int]) -> int {
|
||||
let mut sum = 0;
|
||||
for vec::each(v) |i| { sum += i; }
|
||||
for vec::each(v) |i| { sum += *i; }
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ fn main() {
|
|||
loop { i += 1; if i == 20 { break; } }
|
||||
assert (i == 20);
|
||||
for vec::each(~[1, 2, 3, 4, 5, 6]) |x| {
|
||||
if x == 3 { break; } assert (x <= 3);
|
||||
if *x == 3 { break; } assert (*x <= 3);
|
||||
}
|
||||
i = 0;
|
||||
while i < 10 { i += 1; if i % 2 == 0 { loop; } assert (i % 2 != 0); }
|
||||
|
|
@ -17,7 +17,7 @@ fn main() {
|
|||
if i >= 10 { break; }
|
||||
}
|
||||
for vec::each(~[1, 2, 3, 4, 5, 6]) |x| {
|
||||
if x % 2 == 0 { loop; }
|
||||
assert (x % 2 != 0);
|
||||
if *x % 2 == 0 { loop; }
|
||||
assert (*x % 2 != 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ trait sum {
|
|||
impl &[int]: sum {
|
||||
fn sum() -> int {
|
||||
let mut sum = 0;
|
||||
for vec::each(self) |e| { sum += e; }
|
||||
for vec::each(self) |e| { sum += *e; }
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue