Changeset 6675 for lang/scala/sandbox
- Timestamp:
- 02/14/08 18:27:46 (10 months ago)
- Location:
- lang/scala/sandbox
- Files:
-
- 2 modified
-
src/jp/ne/cappuccino/keisuken/scl/lang/Loop.scala (modified) (2 diffs)
-
webpages/lib/scala-sandbox.jar (modified) (previous)
Legend:
- Unmodified
- Added
- Removed
-
lang/scala/sandbox/src/jp/ne/cappuccino/keisuken/scl/lang/Loop.scala
r6673 r6675 3 3 object Loop { 4 4 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)} 8 9 } 9 10 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]() 12 14 val iterator = iterable.elements 13 while(break.cond ) {15 while(break.cond && iterator.hasNext) { 14 16 val value = iterator.next 15 17 if(value != null) { … … 19 21 } 20 22 } 23 break.value 21 24 } 22 25 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 26 30 } 27 31 28 32 def main(args: Array[String]) { 29 33 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) 33 37 else 34 38 i += 1 39 } match { 40 case Some(result) => println(result) 41 case None => println("Not found") 35 42 } 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) 42 47 } 43 } 48 println(result) 49 } 44 50 }
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)