apply方法和unapply方法
apply方法和unapply方法
appply方法
通常,在一个类的伴生对象中定义apply方法,在生成这个类的对象时,就省去了new关键字。
请看下面代码:
class Foo(foo:String){}object Foo{def apply(foo:String) : Foo = {new Foo(foo)}
}
定义一个Foo类,并且在这个类中,有一个伴生对象Foo,里面定义了apply方法。有了这个apply方法以后,在调用这个类的时候用函数的方式来调用:
object Client{def main(args:Array[String]):Unit = {val foo = Foo("hello")}
}
我们用Foo("hello")
的方式,就得到了一个Foo类型的对象,这一切就是apply方法的功劳。如果没有apply方法,我们将需要使用new关键字来得到Foo对象。
unapply方法
可以认为unapply方法是apply方法的反向操作,apply方法接受构造参数变成对象,而unapply方法接受一个对象从中提取值。
请看下面的代码:
class Money(val value : Double, val country : String){}object Money{def apply(value : Double, country : String) : Money = new Money(value, country)def unapply(Money : Money) : Option[(Double, String)] = {if(money = null) None else Some(money.value, money.country)}
}
客户端实现:
def testUnapply {val money = Money(10.1, "RMB")money match{case Money(num, "RMB") => println("RMB:" + num)case _ => println("Not RMB!")}
}
//最后输出
RMB:10.1
参考博文
http://blog.csdn.net/bitcarmanlee/article/details/76736252
apply方法和unapply方法相关推荐
- apply方法和call方法的详解2
1.apply和call的区别在哪里 2.什么情况下用apply,什么情况下用call 3.apply的其他巧妙用法(一般在什么情况下可以使用apply) 我首先从网上查到关于apply和call的定 ...
- angularJS学习小结——$apply方法和$watch方法
引言 最近在项目中封装控件的时候用到了$watch方法来监听module中的值的变化,当时小编对这个方法不是很了 解,所以在网上找了一些资料来学习一下,下面小编就给大家简单介绍一些angularJS中 ...
- pandas中DataFrame的apply()方法和applymap()方法,以及python内置函数map()
我们经常会对DataFrame对象中的某些行或列,或者对DataFrame对象中的所有元素进行某种运算或操作,我们无需利用低效笨拙的循环: import pandas as pd import num ...
- python 推迟运行_一文看懂Python的time模块sleep()方法和strftime()方法
概述 今天主要介绍一下Python的time sleep()方法和strftime()方法. 一.Python time sleep()方法 Python time sleep() 函数推迟调用线程的 ...
- JS服务器端开发基础篇(Array.slice方法和splice方法)
Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正. 一.slice ...
- Loader的load方法和loadBytes方法LoaderContext参数
(1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...
- ThinkPHP 中M方法和D方法的具体区别
M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...
- asp.net TemplateField模板中的Bind方法和Eval方法
TemplateField模板中为了能够有限制的或者取出数据库中某列的值时,可以用Bind和Eval方法来实现.以下是Bind方法的格式,Eval的格式也是和Bind一样的. Bind("列 ...
- hashcode()方法和equals()方法
一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...
最新文章
- Linux常用命令--网终设置
- LeetCode Trips and Users(关联、分组,聚合)
- hbase shell 查看列名_hbase shell 命令行的操作
- Direct2D (11) : 画刷之 ID2D1LinearGradientBrush
- MNIST机器学习入门(学习记录)——1
- python打包exe 之打包sklearn模型中的各种坑及其解决方法。
- python归一化sklearn_用sklearn进行对数据标准化、归一化以及将数据还原详解
- LeetCode 70 爬楼梯
- 被坑了 | 那个写公众号,开网店的小小,被花式坑了!
- Java 开源博客 Solo 1.6.0 发布 - 新后台
- 又被腾讯刷屏!果然是印钞机.....酸哭了...
- 544B. Sea and Islands
- 《数据结构题集》2.12
- Effective Kotlin 中文版
- 数据库原理与应用(五)专门的关系运算
- Latex 1: 解决latex中遇到一个常见错误:Improper alphabetic constant.
- 直播答题狂撒币,这些“AI开挂神器”如何在10秒内算出正确答案?
- SequoiaDB巨杉数据库-JDBC驱动
- 开发人员实用的在线工具
- java编程源代码_java经典编程300例源代码下载