16. 1
class Group private (val name:String){
def say(msg:String):Unit = {
println ("The Group " + this.name + " say : " + msg)
}
}
object Group{ 2
private val groups = Map( 3
"techparty" -> new Group("techparty"),
"barcamp" -> new Group("barcamp"),
"openparty" -> new Group("openparty")
)
def getGroup(name:String) = {
4
if (groups.contains(name)) groups(name) else null
}
}
1
2
3 Map
4
17.
18. 1
def play(game:String,members:Array[Member],perform:Member => Unit) = {
println ("The group is playing a game : " + game )
members.foreach{
member => perform(member) 3
}
}
class Member(val name:String,val topic:String){
def this(name:String){
this(name,null) 2
}
}
val members = Array(
new Member("laiyonghao","male",true,"2010,My choices"),
4 new Member("jeff","male",true,"learn scala in haft an hour"),
new Member("iceberg")
)
1
2
3 List foreach
4 List
19. //lambda
1 techparty.play("introduce your self", members, member => println ("My name is " +
member.name))
//
2 def present(member:Member) = {
if (member.topic != null)
println (member.name + " is presenting.")
}
techparty.play("present", members, present)
3 // ,
val potluck = techparty.play("potluck", members, _:Member => Unit)
potluck(_.name + " is eating")
// ============ curry ===============
4 techparty.play_curry("dismiss", members){
member => member.name + " is leaving and going home"
}
1 lambda
2
3
4 curry
21. 1 trait Fan{
def like() = "techparty"
}
trait JavaFan extends Fan{
override def like() = "java " + super.like()
}
2
trait PythonFan extends Fan{
override def like() = "python " + super.like()
}
3 val member = new Member("jeff","learn scala in haft an hour")
with JavaFan with PythonFan
4 member.like()
1 ,trait
2 trait class
3 mixin with)
4 mixin
22.
23. 1
def search(condition:Any):String = {
2 condition match {
case "sleepy" =>
println("you look sleepy,sleep 1 second")
Thread.sleep(1000)
3
case q:String => println("search by a keyword :" + q)
case ("name",name:String) => println("search by name : " + name)
case (year:Int,month:Int) => println("search by year " + year +
" and " + month)
4 case _ => println("can't handle your search");return "fail"
}
"success"
}
1
2
3
4
24.
25. val receiver = self
1 actor {
receiver ! techparty.search("jeff",2010) 2
}
3 val at = actor {
receiver ! (self,techparty.search("sleepy"))
}
println("waiting for actor to finish")
4 for(i <- 1 to 2){
receive { 5
case (at,status:String) => println("hey,at is finish his job,and the
status is: " + status)
case "success" => println("search finish")
case "fail" => println("search fail")
}
}
1 actor
2
3 actor
4 for
4 case