Changeset 6678 for lang/scala

Show
Ignore:
Timestamp:
02/14/08 20:22:11 (10 months ago)
Author:
keisuken
Message:

Loop object updated. findDoWhile method add.

Location:
lang/scala/sandbox
Files:
1 added
2 modified

Legend:

Unmodified
Added
Removed
  • lang/scala/sandbox/src/jp/ne/cappuccino/keisuken/scl/lang/Loop.scala

    r6677 r6678  
    99  } 
    1010 
    11   def find[A, B] 
     11  def foreach[A, B] 
    1212    (iterable: Iterable[A])(f: (A, Break[B]) => Unit): Option[B] = { 
    1313    val break = new Break[B]() 
     
    2424  } 
    2525 
    26   def find[A](cond: => Boolean)(f: Break[A] => Unit): Option[A] = { 
     26  def findWhile[A](cond: => Boolean)(f: Break[A] => Unit): Option[A] = { 
    2727    val break = new Break[A]() 
    2828    while(break.cond && cond) f(break) 
     29    break.value 
     30  } 
     31 
     32  def findDoWhile[A](cond: => Boolean)(f: Break[A] => Unit): Option[A] = { 
     33    val break = new Break[A]() 
     34    do {f(break)} while(break.cond && cond) 
    2935    break.value 
    3036  } 
     
    3339 
    3440    var i = 0 
    35     find[Int](true) {break => 
     41    findWhile[Int](true) {break => 
    3642      if(i >= 5) 
    3743        break(i) 
     
    4349    } 
    4450 
    45     val result = find[String, String]( 
     51    i = 0 
     52    findWhile[Int](i < 10) {break => 
     53      if(i == 20) 
     54        break(i) 
     55      else 
     56        i += 1 
     57    } match { 
     58      case Some(result) => println(result) 
     59      case None => println("Not found") 
     60    } 
     61 
     62    i = 0 
     63    findDoWhile[Int]({i += 1; i < 10}) {break => 
     64      if(i == 5) break(i) 
     65    } match { 
     66      case Some(result) => println(result) 
     67      case None => println("Not found") 
     68    } 
     69 
     70    val result = foreach[String, String]( 
    4671      Array("aaa", "bbb", "ccc")) {(value, break) => 
    4772      if(value.equals("ddd")) 
     
    5075    println(result) 
    5176 
    52     find[String,String](Array("aaa", "bbb", "ccc")) {(value, break) => 
     77    foreach[String,String](Array("aaa", "bbb", "ccc")) {(value, break) => 
    5378      if(value.equals("bbb")) 
    5479        break(value) 
     
    5883    } 
    5984 
    60     find[Int,Int](1 to 10) {(i, break) => 
     85    foreach[Int,Int](1 to 10) {(i, break) => 
    6186      if(i % 2 == 1) break(i) 
    6287    } match {