forvaleq.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 93 行

SCALA
93
字号
// test "val foo =" clauses in for comprehensions// $Id: forvaleq.scala 6992 2006-03-30 14:41:31Z dubochet $import scala.collection.immutable.Queueimport scala.{List=>L}  object Test {  // redefine some symbols to make it extra hard  class List  class Tuple2  def List[A](as:A*) = 5  def firstDigit(x:int): int =    x match {    case 0 => 0    case _ if(x<0) => firstDigit(-x)    case _ if(x<10) => x    case _ => firstDigit(x / 10)  }      {    // a basic test case         val input = L.range(0,20)    val oddFirstTimesTwo =      for{val x <- input          val xf = firstDigit(x)          xf % 2 == 1}        yield x*2    Console.println(oddFirstTimesTwo)  }  {    // a test case with patterns        val input = L.range(0,20)    val oddFirstTimesTwo =      for{val x <- input          val xf = firstDigit(x)          val yf = x - firstDigit(x) / 10          val Pair(a, b) = Pair(xf - yf, xf + yf)          xf % 2 == 1}        yield a + b    Console.println(oddFirstTimesTwo)  }    {    // make sure it works on non-Ls     //   val input: Queue = Queue.Empty[int].incl(L.range(0,20))    val input = L.range(0,20).elements    val oddFirstTimesTwo =      for{val x <- input          val xf = firstDigit(x)          xf % 2 == 1}        yield x*2    Console.println(oddFirstTimesTwo.toList)      }    {    // yield the computed value        val input = L.range(0,20)    val oddFirstTimesTwo =      for{val x <- input          val xf = firstDigit(x)          xf % 2 == 1}        yield xf*2    Console.println(oddFirstTimesTwo)      }  {    // make sure the function is only called once    var count: int = 0        def fdct(x: int) = {      count = count + 1      firstDigit(x)    }        val input = L.range(0,20)    for{val x <- input        val xf = fdct(x)        xf % 2 == 1}      yield xf          Console.println("called " + count + " times")  }  def main(args: Array[String]): Unit = ()}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?