traint相当于定义了一个接口例如:
trait Equal {
def isEqual(x:Any) :Boolean
def isNotEqual(x:Any) :Boolean = !isEqual(x)
}
接口 子类中必须重写(不需要使用关键字override)
class Point(xc:Int, yc:Int) extends Equal{
var x: Int= xc
var y: Int = yc
def isEqual(obj: Any):Boolean = {
return obj.isInstanceOf[Point] && obj.asInstanceOf[Point].x == x
}
}
isIntanceOf[Point] 是判断是否是Point实例, asinstanceOf[Point] 返回Point实例
test:
val p1 = new Point(2, 3)
val p2 = new Point(2, 4)
val p3 = new Point(3, 3)
println(p1.isNotEqual(p2))
println(p1.isNotEqual(p3))
println(p1.isNotEqual(2))
output:
false
true
true
匹配
关键字: match, =>
普通匹配
def getData(data:Any) = data match {
case 1 => println("1")
case y:Int => println(y)
case "one" => {println("okk");println("one")}
case _ => println("default")
}
测试:
getData(1)
getData(4)
getData("one")
getData(data = 212.4)
output:
1
4
okk
one
default
定义匹配样例:
关键字 case
case class Person(name: String, age: Int)
val alice = new Person("Alice", 25)
val bob = new Person("Bob", 32)
val charlie = new Person("Charlie", 32)
for (person <- List(alice, bob, charlie)) {
person match {
case Person("Alice", 25) => println("Hi Alice!")
case Person("Bob", 32) => println("Hi Bob!")
case Person(name, age) =>
println("Age: " + age + " year, name: " + name + "?")
}
}
output:
Hi Alice!
Hi Bob!
Age: 32 year, name: Charlie?
1. Person(name, age) 匹配其它的用户
2. case class Person(name:String, age:Int) 定义匹配的样例