Changeset 6675 for lang/scala/sandbox

Show
Ignore:
Timestamp:
02/14/08 18:27:46 (10 months ago)
Author:
keisuken
Message:

Loop method updated. method name is while and foreach to find.

Location:
lang/scala/sandbox
Files:
2 modified

Legend:

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

    r6673 r6675  
    33object Loop { 
    44 
    5   class Break(var cond: Boolean) { 
    6     def this() = this(true) 
    7     def apply(): Unit = cond = false 
     5  class Break[T](var cond: Boolean, var value: Option[T]) { 
     6    def this() = this(true, None) 
     7    def apply(): Unit = {cond = false; value = None} 
     8    def apply(v: T): Unit = {cond = false; value = Some(v)} 
    89  } 
    910 
    10   def forLoop[A](iterable: Iterable[A])(f: (A, Break) => Unit): Unit = { 
    11     val break = new Break() 
     11  def find[A, B] 
     12    (iterable: Iterable[A])(f: (A, Break[B]) => Unit): Option[B] = { 
     13    val break = new Break[B]() 
    1214    val iterator = iterable.elements 
    13     while(break.cond) { 
     15    while(break.cond && iterator.hasNext) { 
    1416      val value = iterator.next 
    1517      if(value != null) { 
     
    1921      } 
    2022    } 
     23    break.value 
    2124  } 
    2225 
    23   def whileLoop(cond: () => Boolean)(f: Break => Unit): Unit = { 
    24     val break = new Break() 
    25     while(break.cond && cond()) f(break) 
     26  def find[A](cond: => Boolean)(f: Break[A] => Unit): Option[A] = { 
     27    val break = new Break[A]() 
     28    while(break.cond && cond) f(break) 
     29    break.value 
    2630  } 
    2731 
    2832  def main(args: Array[String]) { 
    2933    var i = 0 
    30     whileLoop(() => i < 10) {break => 
    31       if(i == 5) 
    32         break() 
     34    find[Int](true) {break => 
     35      if(i >= 5) 
     36        break(i) 
    3337      else 
    3438        i += 1 
     39    } match { 
     40      case Some(result) => println(result) 
     41      case None => println("Not found") 
    3542    } 
    36     println(i) 
    37     forLoop(Array("abc", "cde", "efg")) {(value, break) => 
    38       if(value.equals("efg")) 
    39         break() 
    40       else 
    41         println(value) 
     43    val result = find[String, String](Array("aaa", "bbb", "ccc")) 
     44    {(value, break) => 
     45      if(value.equals("ddd")) 
     46        break(value) 
    4247    } 
    43   } 
     48    println(result) 
     49 } 
    4450}