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
- scala 笔记
- Scala笔记
- scala笔记
- scala笔记
- scala笔记
- scala笔记
- scala笔记
- Scala学习笔记1
- Scala学习笔记2
- 笔记之SCala
- scala语言学习笔记
- Scala学习笔记
- scala学习笔记01
- Scala学习笔记02
- Scala学习笔记03
- Scala学习笔记04
- Scala 自学笔记
- scala学习笔记:集合
- python人工智能包inspyred使用心得-生物启发算法概述
- uboot编译链接过程
- HDU 2852 KiKi's K-Number(线段树+树状数组)
- 的法规和地方国胡的法规和地方国胡
- Swing 设置JScrollPanel 滚动条位置
- scala 笔记
- 断点继续的原理
- 变形金刚4
- 是大法官第三方电饭锅电饭锅
- C++需要注意的强制类型转换运算符
- tomcat启动报错ERROR:transport error 202:bind failed:Address already
- 梵蒂冈的双方各十分的个第三方还是东方红
- 解决VM虚拟机导致硬盘灯常亮,很卡的问题
- 看看啥效果