structural.scala

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

SCALA
202
字号
object test1 {    val o1 = new Object { override def toString = "ohone" }  val o2 = new Object { override def toString = "ohtwo" }    val t1 = new Tata("tieone")  val t2 = new Tata("tietwo")    class Tata(name: String) {    override def toString = name    def tatMe = "oy"  }    class Titi extends Tata("titi")    object Rec {    val a = 1    val b = 2    val c = "hey"    def d(x: AnyRef) = new Object { override def toString = "dee" }    def e(x: Tata) = new Tata("iei")    def f(x: Int) = x + 1    def g(x: Int) = { v = x }    def h(x: Unit) = new Object { override def toString = "eitch" }    def i(x: Array[Int]) = x(0)    def j(x: Array[AnyRef]) = x(0)    def k(x: Array[Char]) = x(0)    def l(x: Array[Unit]) = x(0)    def m(x: Array[String]) = x(0)    def n(x: Array[Tata]) = x(0)    def o: Array[Int] = Array(1, 2, 3)    def p: Array[AnyRef] = Array(o1, o2)    def q: Array[Char] = Array('1', '2')    def r: Array[Unit] = Array((), ())    def s: Array[String] = Array("one", "two")    def t: Array[Tata] = Array(t1, t2)    def u[T](f: T=>T, v:T): T = f(v)    var v = 4    var w = 11    val x = t1    val y: Tata = null    def z(t: Tata) = ()  }    type rt = Object {    val a: Int;    val c: String;    def d(x: AnyRef): AnyRef    def e(x: Tata): Tata    def f(x: Int): Int;    def h(x: Unit): AnyRef;    def i(x: Array[Int]): Int    def j(x: Array[AnyRef]): AnyRef    def k(x: Array[Char]): Char    def l(x: Array[Unit]): Unit    def m(x: Array[String]): String    def n(x: Array[Tata]): Tata    def o: Array[Int]    def p: Array[AnyRef]    def q: Array[Char]    def r: Array[Unit]    def s: Array[String]    def t: Array[Tata]    def u[T](f: T=>T, v:T): T    var v: Int    val y: Tata  }    def l (r: rt) {    println(" 1. " + r.c)    println(" 2. " + r.a + 1)    println(" 3. " + r.d(o1))    println(" 4. " + r.e(t1))    println(" 5. " + (r.f(4) + 1))    println(" 6. " + r.f(4) + 1)    println(" 7. " + r.f(r.a))    println(" 8. " + r.v)    r.v = r.v + 1    println("10. " + r.v)    println("11. " + r.h(()))    println("12. " + r.i(Array(1, 2, 3)))    println("13. " + r.j(Array(o1, o2)))    println("14. " + r.k(Array('1', '2')))    println("15. " + r.l(Array((), ())))    println("16. " + r.m(Array("one", "two")))    println("17. " + r.n(Array(t1, t2)))    println("18. " + (r.o(0) + 1))    println("19. " + (r.p(0).hashCode() > 0))    println("20. " + r.q(0))    println("21. " + r.r(0))    println("22. " + r.m(r.s))    println("23. " + r.t(0).tatMe)    println("24. " + r.u[Int](_+1,0))    println("25. " + r.y)    println("26. " + r.e(null))  }    /*def ma[T](r: Object{def e(x: T): T; val x: T}) {    println("30. " + r.e(r.x)) // static error  }*/    def mb(r: Object { def e[T](x: T): T }) {    println("31. " + r.e[Int](4)) // while this is ok  }    def m1(r: Object { def z(x: Tata): Unit }) {    println("32. " + r.z(new Titi)) // while this is ok  }    def m2[T](r: Object { def e(x: Tata): T; val x: Tata }) {    println("33. " + r.e(r.x)) // and this too  }    class Rec3[T] {    def e(x: T): T = x  }    def m3[T](r: Rec3[T], x: T) {    println("33. " + r.e(x)) // and this too  }    Rec.g(11)    this.l(Rec)  this.mb(new Object{def e[T](x: T): T = x})  this.m1(Rec)  this.m2[Tata](Rec)  this.m3[Tata](new Rec3[Tata], t1)}object test2 {  class C extends { def f() { println("1") } }  val x1 = new C  x1.f()    abstract class D extends { def f() }  val x2 = new D { def f() { println("2") } }  x2.f()  val x3 = new { def f() { println("3") } }  def run(x: { def f() }) { x.f() }  run(x3)  type T = { def f() }  val x4 = new AnyRef { def f() { println("4") } } // ok!  //val x4 = new T { def f() { println("4") } }        // error! (bug #1241)  x4.f()  val x5: T = new { def f() { println("5") } }  x5.f()}object test3 {  case class Exc extends Exception    object Rec {    def f = throw Exc()  }    def m(r: { def f: Nothing }) =    try {      r.f    }    catch {      case e: Exc => println("caught")      case e => println(e)    }    m(Rec)  }object test4 {  class A    val aar = Array(new A, new A, new A)  val nar = Array(1, 2)    def f(p: {def size: Int}) = println(p.size)  //def g[T <: {def size: Int}](p: T) = println(p.size) // open issue  //def h[T <% {def size: Int}](p: T) = println(p.size) // open issue    f(aar)  f(nar)    //g(aar)  //g(nar)    //h(aar)  //h(nar)  }object Test extends Application {  test1  test2  test3  test4}

⌨️ 快捷键说明

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