apply方法
apply方法被称作注入方法,在类的伴生对象中做一个初始化操作
apply方法的参数列表不需要跟构造器的参数列表统一
apply方法是定义在伴生对象中的

当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。
apply方法有点类似于java中的构造函数,接受构造参数变成一个对象。

unapply方法
那么unapply方法就刚好相反,他是接受一个对象,从对象中提取出相应的值。
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

为什么只能在object对象定义main方法才能作为入口?
类比java中的main方法的修饰词public static得知main方法是static(静态的),在scala中静态方法或者属性是在object修改的对象中的,object修饰的对象是singleton,用于保存静态成员等。

scala中apply和unapply方法相关推荐

  1. scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...

    有没有办法用scala中的高阶方法替换嵌套的For循环 问题描述 投票:0回答:1 我有一个mutableList,并希望获取所有行的总和,并根据某些条件将其行替换为其他值.下面的代码对我来说工作正常 ...

  2. (四)Scala中apply的应用

    class & object 概述:apply方法用于在Scala创建对象时,免new的操作,使代码更加简洁优雅 具体操作测试方法: class 和 object 可以类名相同. class ...

  3. 关于javascript中apply()和call()方法

    ref:http://www.popo4j.com/article/the-differences-of-apply-and-call.html 如果没接触过动态语言,以编译型语言的思维方式去理解ja ...

  4. 关于javascript中apply()和call()方法的区别

    原文地址:http://www.cnblogs.com/fighting_cp/archive/2010/09/20/1831844.html 转载于:https://www.cnblogs.com/ ...

  5. Scala中的apply方法

    1.apply的场景 Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法,具体原因 后边再讲: 在上句中Scala 生成Array对象, 会自动去调用 Array 这个伴 ...

  6. 在Scala中设置&()方法

    Scala中的Set&()方法 (The Set &() method in Scala) The &() method in the Set is used to creat ...

  7. scala的apply用法

    Scala中apply的用法 Scala中的 apply 方法有着不同的含义, 对于函数来说该方法意味着调用function本身, 以下说明摘自Programming in Scala, 3rd Ed ...

  8. Scala系列-4、scala中特质、柯里化、闭包等

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 传送门:大数据系列文章目录 目录 scala中特质 特质作为接口使用 特质中放置非抽象的成员 ...

  9. Scala中的Map使用例子

    Map结构是一种非常常见的结构,在各种程序语言都有对应的api,由于Spark的底层语言是Scala,所以有必要来了解下Scala中的Map使用方法. (1)不可变Map 特点: api不太丰富 如果 ...

最新文章

  1. like mysql 相反_mysql真的不能做搜索引擎吗?
  2. Flutter之Decoration(边框、圆角、阴影、形状、渐变、背景图像等)
  3. Catalyst3560密码破解
  4. React Native中常用ES6语法
  5. Pygame实战项目:用300行代码写出贪吃蛇小游戏
  6. java创建子类对象的步骤_一顿Spring骚操作:我敢说没有人比我更懂Java对象的创建!
  7. 大学生python实验心得体会_大学生实验心得体会精选例文【三篇】
  8. 动画-animation
  9. 20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)
  10. PAT乙类之1011 A+B 和 C
  11. Git 教程学习--第三篇
  12. Linux 6安装kde桌面,CentOS 5/6 安装 GNOME 或 KDE 桌面
  13. oracle 查看主外键约束
  14. 麦当劳将携手逾100所职业院校提升就业能力;百胜中国一季度开设315家新店 | 美通企业日报
  15. 2023年天津仁爱学院专升本化学工程与工艺对口专业限制目录
  16. ubuntu18.04安装opencv记录
  17. 【数学之美】分形图形动画演示欣赏
  18. aruco字典如DICT_4X4_50含义
  19. 自学web前端怎么学?web前端学习路线css属性
  20. 判断字母是元音、辅音、半元音

热门文章

  1. OpenHarmony通过元气派点亮LED灯
  2. quicksort java_Java代码实现快速排序(QuickSort)
  3. QuickSort c++
  4. 【无人机】无人机的气象数据采集系统设计(Matlab代码实现)
  5. 三、pcm音频转wav
  6. R语言使用table函数统计dataframe数据中的离散变量(分类变量、因子变量)数据列的每一种水平的统计计数
  7. 十种距离计算公式及Python简单实践(余弦距离、欧式距离、jaccard距离等)
  8. python弹出输入框_Python实现使用tkinter弹出输入框输入数字, 具有确定输入和清除功能...
  9. Css实现手机端页面强制横屏
  10. SaaS软件商需要什么样的云计算