misc.scala

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

SCALA
240
字号
// $Id: misc.scala 10755 2007-04-19 17:59:46Z michelou $object Test {def fac(n: Int): Int = if (n < 2) 1 else fac(n - 1) * n;// Fibonaccidef fib(n: Int): Int = if (n < 2) 1 else fib(n - 1) + fib(n - 2);def show_fib(n: Int): Int = {    Console.print("### fib(");    Console.print(n);    Console.print(") = ");    Console.flush;    val v = fib(n);    Console.print(v);    Console.println;    Console.flush;    v}def id[X](x: X): X = x;def apply[X](f: X => X, x: X): X = f(x);def id_obj(x: AnyRef): AnyRef = x;def apply_obj(f: AnyRef => AnyRef, x: AnyRef): AnyRef = f(x);def id_any(x: scala.Any): scala.Any = x;def apply_any(f: scala.Any => scala.Any, x: scala.Any): scala.Any = f(x);def id_int(x: Int): Int = x;def apply_int(f: Int => Int, x: Int): Int = f(x);class MyClass() {    override def toString() = "=== MyClass::toString ===";    def test() = Console.println("=== MyClass::test ===");}class MySubclass() extends MyClass() {    override def toString() = "=== MySubclass::toString ===";}def foobar = {    42;    42l;    23.5f;    23.5;    "Hello";    32 + 45;    // !!! System    // java; // !!! why is this legal ? what  does it return ?    // java.lang;    //System.out;    Console.println("### Hello");    Console.print("### ");    Console.println(17);    Console.println("### Bye");    Console.println;    val x = 13;    x;    // !!! why are DefDef replaced by Block(Tree[0])? we should use Empty!        def f = 19;    f;    def f0() = 11;    f0();    def f1(x: Int) = x;    f1(7);    def f2(x: Int, y: Int) = x + y;    f2(3,5);    def f11(x: Int)(y: Int) = x + y;    f11(23)(2);    1 < 2;    if (1 < 2) 3 else 4;    show_fib(0);    show_fib(1);    show_fib(2);    show_fib(3);    show_fib(4);    // !!! show_fib(id[Int](4));/*    show_fib(5);    show_fib(6);    show_fib(7);    show_fib(8);    show_fib(9);    show_fib(10);    show_fib(11);    show_fib(12);*/    val myObj = new MyClass();    Console.println(myObj);    val mySub = new MySubclass();    Console.println(mySub);    myObj.test();    Console.println;    Console.println(apply_any(id_any, "identity").toString());    Console.println;};foobar;//############################################################################class A(a: Int) {  def getA = a;}class B(b: Int, c: Int) extends A(b + c) {  def getB = b;}class X(x: Int) {  def getX = x;}case class Y(y: Int, z: Int) extends X(y + z) {  def getY = y;  def getAA = this.y;}{  val a: A = new A(1);  val b: B = new B(2,3);  val x: X = new X(4);  val y: Y = new Y(5,6);  Console.println("A.a = " + a.getA);  Console.println("B.a = " + b.getA);  Console.println("B.b = " + b.getB);  Console.println;  Console.println("X.a = " + x.getX);  Console.println("Y.a = " + y.getX);  Console.println("Y.b = " + y.getY);  Console.println("Y.b = " + y.y);  Console.println;}//############################################################################{class X() {  def foo = {    Console.println("X::foo");  }}class Y() extends X() {  override def foo = {    Console.println("Y::foo");    super.foo;  }}val x: X = new X();val y: X = new Y();x.foo;Console.println;y.foo;Console.println;}//############################################################################{class X() {}class O(a: Int) {  case class Y(b: Int) extends X() {    override def toString() = "";    def bar = a + b;  }  def foo = Y(2).bar}Console.println(new O(1).foo)}{class O(a: Int) {  class X() {}  case class Y(b: Int) extends X() {    override def toString() = "";    def bar = a + b;  }  def foo = Y(2).bar}Console.println(new O(1).foo)}Console.println;  case class Bar();  case class Foo(i:int, j:char, c:Bar) ;  Console.println(    true // Foo(3,'a',Bar()).caseElement( -1 ) == null // throws Exception now    && Foo(3,'a',Bar()).productElement( 0 ) == 3    && Foo(3,'a',Bar()).productElement( 1 ) == 'a'    && Foo(3,'a',Bar()).productElement( 2 ) == Bar()    && true // Foo(3,'a',Bar()).caseElement( 3 ) == null // throws Exception now    && Bar().productArity == 0    && Foo(3,'a',Bar()).productArity == 3);//############################################################################  def main(args: Array[String]): Unit = {    ()  }//############################################################################}

⌨️ 快捷键说明

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