apply he unapply 都是放在object 半生类里面。
apply 可以用来new对象,
unapply能够解析对象。一般与match 联合使用
class UnapplyTest (var x :String ,var y :Int) { } object UnapplyTest { def apply(x:String): UnapplyTest ={ val array = x.split(":") require(array.length==2) new UnapplyTest(array(0).toString,array(1).toInt) } def unapply(unapplyTest: String): Option[(String,Int)]={ val array = unapplyTest.split(":") Some(array(0).toString,array(1).toInt) } def main(args: Array[String]): Unit = { val unapplyTest = UnapplyTest("localhost:8080") println(unapplyTest.x+":" + unapplyTest.y) var test = "localhost:8080" test match { case UnapplyTest("localhost",8080) => print("I am here") } } }
test 是String类型,本身是无法匹配UnapplyTest 类型的。
应为在unapply里面定义里,
在这里会先将String,调用unapply 然后与输出的option 比较。
输出:
localhost:8080
I am here
Process finished with exit code 0