Scala编程基础--traint和匹配

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) 定义匹配的样例

猜你喜欢

转载自blog.csdn.net/weixin_39594447/article/details/87919911