ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

case语句的变量绑定(p @ T)

2022-08-02 18:05:25  阅读:116  来源: 互联网

标签:case 语句 String age 绑定 Person Address name


假设以下场景:你需要从对象中提取值,但你又想将一个变量赋给该对象的整体。该怎么做呢?
我们来对前文中匹配Person 类的属性的实例做以下修改。

 1     case class Address(street: String, city: String, country: String)
 2     case class Person(name: String, age: Int, address: Address)
 3 
 4     val alice = Person("Alice", 25, Address("1 Scala Lane", "Chicago", "USA"))
 5     val bob = Person("Bob", 29, Address("2 Java Ave.", "Miami", "USA"))
 6     val charlie = Person("Charlie", 32, Address("3 Python Ct.", "Boston", "USA"))
 7 
 8     for (person <- Seq(alice, bob, charlie)) {
 9       person match {
10         case p@Person("Alice", 25, address) => println(s"Hi Alice! $p")
11         case p@Person("Bob", 29, a@Address(street, city, country)) =>
12           println(s"Hi ${p.name}! age ${p.age}, in ${a.city}")
13         case p@Person(name, age, _) =>
14           println(s"Who are you, $age year-old person named $name? $p")
15       }
16     }
17   }

p @ …的语法将整个 Person 类的实例赋值给了变量 p,类似地,a @ …也将整个 Address实例赋值给了变量。以下为修改版本的实例输出。(为适应排版做了格式化。)

 

 

记住,如果不需要从Person 实例中提取属性值,我们只要写为p: Person => …就可以了。

标签:case,语句,String,age,绑定,Person,Address,name
来源: https://www.cnblogs.com/linbo3168/p/16544651.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有