scala 笔记

来源:互联网 发布:arp攻击软件是什么 编辑:程序博客网 时间:2024/05/16 07:31

主构造函数

class Car(val name:String , age:Int){   val id  = age;   val sname = name;   def this(name:String) = this(name,1);}
   <span style="font-family: Arial, Helvetica, sans-serif;">val car1 = new Car("wang",1)</span>
    val car2 = new Car("xun")    println(car1.name)    println(car2.age)  //error  在age 前加 val 或var 即可

伴生对象

class Car(val name : String){  val idd = 1  override def toString() = {      val name = "car "      name + idd    }  }
object Car{   var id  = 1;   def show(name:String) = println(name);   def apply(name : String)={     println("create")     new Car(name)
   //if name.empy() null else new Car(name)  则不能调用car.idd  因为存在null的情况   }  }

协变class fruit{  override def toString() = "fruit"}class banana extends fruit{override def toString() = "banana"}class apple extends fruit{override def toString() = "apple"} def sail(fruits:Array[fruit]){       for(f <- fruits)         println(f)     }  val fruits = Array(new apple(),new banana())   //ok fruis type is Array[fruit]  sail(fruits)     val fruits = Array(new apple(),new apple)   //error fruis type is Array[apple]  sail(fruits)将sail 改为  def sail(fruits:Array[fruit]){       for(f <- fruits)         println(f)     }     def sail2[T <: fruit](fruits:Array[T]){       for(f <- fruits)         println(f)     }    //ok  


偏应用函数



def print1(month:String, date: String){     println( month +  " " + date )      }    val da = print1("12 " ,_:String)    da("34")
</pre><pre code_snippet_id="450410" snippet_file_name="blog_20140814_10_3315719" name="code" class="java">借贷模式(loan)
   def write2File(name:String)(codeblock:PrintWriter => Unit){      val writer = new PrintWriter(new File(name))      try{         codeblock(writer)      }      finally{        writer.close()      }          }    write2File("output.txt"){writer => writer write "hello "}
</pre><pre code_snippet_id="450410" snippet_file_name="blog_20140814_16_4326022" name="code" class="java">
</pre><pre code_snippet_id="450410" snippet_file_name="blog_20140814_16_4326022" name="code" class="java">
</pre>  <p></p><p></p><p><pre name="code" class="java">actors模型
package com.xunwimport scala.actors.Actor.actorimport scala.actors.Actor.receiveimport scala.actors.Actor.senderobject Hello extends App {      // Spawn Consumer      val consumer =        actor        {          var done = false          while (! done)          {            receive            {              case msg =>                System.out.println("MESSAGE RECEIVED: " + msg)                println(Thread.currentThread().getName())                done = (msg == "DONE")                sender! "RECEIVED"            }          }        }          // Spawn Producer              val importantInfo : Array[String] = Array(          "Mares eat oats",          "Does eat oats",          "Little lambs eat ivy",          "A kid will eat ivy too",          "DONE"        );                importantInfo.foreach((msg) => consumer !?msg)}


</pre><pre code_snippet_id="450410" snippet_file_name="blog_20140815_16_6681474" name="code" class="java">和主线程通信
package com.xunwimport scala.actors.Actor.actorimport scala.actors.Actor.receiveimport scala.actors.Actor.senderimport scala.actors.Actor.{mailboxSize,self}object Hello extends App {        def sumInRange(lower:Int,upper:Int,number:Int){        (0 /: (lower to upper)){(sum,i) => if(number % 2 ==0) sum+i else sum}      }            val startTime :Long = 0      val caller = self                     val eActor = actor{              println("num received" + mailboxSize)        caller ! "send"        Thread.sleep(3000)        receive{          case massage => println(System.currentTimeMillis() - startTime)        }                  caller ! "hello main"      }           receive{        case _=> println("got")       }     eActor ! "hello eActor "            receive{       case msg => println(msg)     }          }

package com.xunwimport scala.actors.Actorimport scala.actors.Actor.{ sender, receive, mailboxSize, self }class AService(folks: String*) extends Actor {  def act() {    while (true) {      receive {        case (caller: Actor, name: String, msg: String) =>          caller ! {            if (folks.contains(name))              String.format("%s got msg %s", name, msg)            else              String.format("this no one called %s", name)          }        case "quit" =>           println("exit actor")          exit      }    }  }}object Hello extends App {  val as = new AService("wang","yu")  as ! (self,"wang","back")  Thread.sleep(3000)  as.start()  as ! (self,"wan","back")  as ! (self,"yu","haha")  as ! (self,"quit")  for(i <- 1 to 3)  receive{    case msg => println(msg)   }   println("over")    }


//receiveWithinpackage com.xunwimport scala.actors.Actorimport scala.actors.TIMEOUTimport scala.actors.Actor.{ sender, receive, mailboxSize, self ,receiveWithin,exit}class AService(folks: String*) extends Actor {  def react() {    var sum = 0     for(i <- 1 to 4) {      sum += receiveWithin(2000) {        case TIMEOUT => {          println("time out")          0        }        case a:Int =>          {println(sum)            Thread.sleep(1000)          a          }        case (caller:Actor,"sum") =>           caller ! sum          0                }      println("heer")    }  }}object Hello extends App {  val as = new AService("wang","yu")  as !1  as !2  as !"fdsf"  as ! (self,"sum")  as.start()    println("over")  //exit//  receiveWithin(5000){//    case sum:Int => println("sum is" + sum)//    case TIMEOUT => println("time out")//  }    }

//reactpackage com.xunwimport scala.actors.Actorimport scala.actors.TIMEOUTimport scala.actors.Actor.{ actor,sender, receive, mailboxSize, self ,receiveWithin,exit,react}object Hello extends App {  def info(msg:String) = println( msg +" reveived by "  + Thread.currentThread())    def reactMsg(id :Int) {    react{      case msg => info("react" + id + msg)      reactMsg(id)    }      }    val acts = Array(  actor{info("react: 1 actor create"); reactMsg(1);},  actor{info("react: 2 actor create"); reactMsg(2);}  )    for(i <- 0 to 1){    acts(i) ! "hello " ;Thread.sleep(3000)  }    for(i <- 0 to 1){    acts(i) ! "world " ;Thread.sleep(3000)  }  }




0 0
原创粉丝点击