scala 笔记

主构造函数

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.xunw
import scala.actors.Actor.actor
import scala.actors.Actor.receive
import scala.actors.Actor.sender
object 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.xunw
import scala.actors.Actor.actor
import scala.actors.Actor.receive
import scala.actors.Actor.sender
import 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.xunw
import scala.actors.Actor
import 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")
  
  
}


//receiveWithin
package com.xunw
import scala.actors.Actor
import scala.actors.TIMEOUT
import 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")
//  }
  
  
}

//react
package com.xunw
import scala.actors.Actor
import scala.actors.TIMEOUT
import 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)
  }
  
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值