2.5 10 max 2的含义是什么?max方法定义在哪个类中?
直接在REPL中执行
Scala代码
1.scala> 10 max 2
2.res0: Int = 10
3.
4.scala> 7 max 8
5.res1: Int = 8
6.
7.scala> 0 max 0
8.res2: Int = 0
2.11 懒值
当val被声明为lazy时,它的初始化将被推迟,直到我们首次对它取值。例如,
lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString
懒值对于开销较大的初始化语句而言十分有用。它们还可以应对其他初始化问题,比如循环依赖。
你可以把懒值当做是介于val和def的中间状态。对比如下定义:
//在worlds被定义时被取值
val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString
//在words被首次使用时取值
lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString
//在每一次words被使用时取值
def words = scala.io.Source.fromFile("/usr/share/dict/words").mkString
2.12 异常
Scala异常工作机制和Java或C++一样
throws new IllegalArgumentException("x should not be negative")
if(x >= 0){
sqrt(x)
} else throw new IllegalArgumentException("x should not be negative")
捕获异常的语法采用的是模式匹配
try{
process(new URL("http://horstmann.com/fred-tiny.gif"))
} catch{
case _: MalformedURLException => println("Bad URL:" + url)
case ex: IOException => ex.printStackTrace()
}
var in = new URL("http://horstman.com/fred.gif").openStream()
try{
process(in)
} finally {
in.close()
}
import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]()
b += 1
b += (1,2,3,5)
//++=操作符追加任何集合
b ++= Array(8,13,21)
//移除最后5个元素
b.trimEnd(5)
val b = ArrayBuffer(1,7,2,9)
val bSorted = b.sorted(_ < _)
val bDescending = b.sorted(_ > _)
val a = Array(1,7,2,9)
scala.util.Sorting.quickSort(a)
a.mkString(" and ")
a.mkString("<",",",">")
a.toString
b.toString
3.6 解读Scaladoc
3.7 多维数组
val matrix = Array.ofDim[Double](3,4)
matrix(row)(column) = 42
val triangle = new Array[Array[Int]](10)
for(i <- until triangle.length)
triangle(i) = new Array[Int](i + 1)
3.8 与Java的互操作
import scala.collection.JavaConversions.bufferAsJavaList
import scala.collection.mutable.ArrayBuffer
val command = ArrayBuffer("ls","-a","/home/cay")
val pb = new ProcessBuilder(command)
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable.Buffer
val cmd: Buffer[String] = pb.command()
val scores = scala.collection.mutable.Map("Alice" -> 10,"Bob" -> 3,"Cindy" -> 8)
val scores = new scala.collection.mutable.HashMap[String,Int]
->操作符用来创建对偶
"Alice" -> 10
上述代码产出的值:
()
1、设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用用一组键,但在价格上9折
2、编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率。读取这些单词的操作可以使用java.util.Scanner:
val in = new java.util.Scanner(new java.io.File("myfile.txt"))
while(in.hasNext()) 处理 in.next()
最后,打印出所有单词和它们出现的次数
3、重复前一个练习,这次用不可变的映射。
4、重复前一个练习,这次用已排序的映射,以便单词可以按顺序打印出来。
5、重复前一个练习,这次用java.util.TreeMap并使之适用于Scala API
6、定义一个链式哈希映射,将“Monday”映射到java.util.Calendar.MONDAY,依次类推加入其他日期。展示元素是以插入的顺序被访问的。
7、打印出所有Java系统属性的表格,类似这样:
java.runtime.name | Java(TM) SE Runtime Environment
sun.boot.library.path | /home/apps/jdk1.6.0.21/jre/lib/i386
java.vm.version | 17.0-bl6
java.vm.vendor | Sun Microsystems Inc
java.vendor.url | http://java.sun.com/
path.separator | :
java.vm.name | Java HotSpot(TM) Server VM
8、编写一个函数
9、编写一个函数
10、当你将两个字符串拉链在一起,比如
11、
第5章
5.1 简单类和无参方法
class Counter{
private var value = 0 //
def increment(){ value += 1}
def current() = value
}
val myCounter = new Counter
myCounter.increment()
println(myCounter.current)
myCounter.current
myCounter.current()
5.2 带getter和setter的属性
5.3 只带getter的属性
5.4 对象私有字段
5.5 Bean属性
import scala.reflect.BeanProperty
class Person{
@BeanProperty var name: String = _
}
将会生成四个方法:
1、name: String
2、name_=(newValue:String):Unit
3、getName():String
4、setName(newValue:String):Unit
class Person(@BeanProperty var name: String)
5.6 辅助构造器
class Person{
private var name = ""
private var age = 0
def this(name: String){
this()
this.name = name
}
def this(name: String,age: Int){
this(name)
this.age = age
}
}
val p1 = new Person
val p2 = new Person("Fred")
val p3 = new Person("Fred",42)
5.7 主构造器
class Person(val name: String,val age: Int){
}
5.8 嵌套类
import scala.collection.mutable.ArrayBuffer
class Network{
class Member(val name: String){
val contacts = new ArrayBuffer[Member]
}
private val members = new ArrayBuffer[Member]
def join(name: String) = {
val m = new Member(name)
members += m
m
}
}
val chstter = new Network
val myFace = new Network
val fred = chatter.join("Fred")
val wilma = chatter.join("Wilma")
fred.contacts += wilma
val barney = myFace.join("Barney")
fred.contacts += barney
object Network{
class Member(val name: String){
val contacts = new ArrayBuffer[Member]
}
}