【scala语言入门】 一、apply与unapply

 1 class Person (val name:String, val age:Int){
 2         var myName = name;
 3         var myAge = age;
 4 
 5         def say():Unit={
 6             println("i am "+myName+" and my age is "+myAge);
 7         }
 8 }
 9 
10 
11 object Person{
12     def apply(name :String , age :Int) : Person = new Person(name,age); 
13 
14     def unapply(p:Person): Option[(String,Int)] = Some(p.myName,p.myAge)
15 }
16 
17 // 测试new出来的 对象是 var还是val ,如果是val,能否修改val指向的对象,或者修改val指向的对象的值
18 object test{
19     
20     def main(args:Array[String]){
21         // 1. new 的 对象能否是 var  .  結果, 可以用var來修饰 创建的对象
22         var people= new Person("good",20);
23         people.say();
24         // 如果属性字段用private修饰了,则不能进行改变,否则可以进行操作
25         // people.myName="hello";
26         
27         // 2. 用val来表示new的对象
28         val p2 = new Person("thank",20);
29         p2.myAge=40;
30 
31         // 不能对val修饰的常量重新赋值
32         // p2=people;
33         p2.say();
34 
35         //  用伴生对象的apply来创建实例
36         val p3=Person("big",30);
37         p3.say();
38 
39         // 3.模式匹配配合unapply获取对象的参数
40         p3 match {
41             // s是模板字符串的,字符串前面加上s,才能在字符串里使用$ 去引用变量;
42             case Person(name,age) => println(s"name:$name , age:$age ");
43             case _ => println("无法解析");
44         }
45 
46     }
47 }

运行结果:

warning: 1 deprecation (since 2.13.0); re-run with -deprecation for details
i am good and my age is 20
i am thank and my age is 40
i am big and my age is 30
name:big , age:30 
[Finished in 2.7s]

注意: scala是运行在JVM上的语言,所以需要本地先安装java,再安装scala才能运行。

原文地址:https://www.cnblogs.com/zhaohuaxishi/p/14361882.html