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

Every function value is an instance of some class that extends one of several FunctionN traits in package scala, such as Function0 for functions with no parameters, Function1 for functions with one parameter, and so on. Each FunctionN trait has an apply method used to invoke the function.

在Scala语言中, 函数也是对象, 每一个对象都是scala.FunctionN(1-22)的实例, 其中N是函数参数的数量, 例如我们定义一个函数并复制给一个变量:

scala> val f = (x: Int) => x + 1
f: Int => Int =
这里定义了一个接收一个整型变量作为参数的函数, 函数的功能是返回输入参数加1. 可以看到REPL返回参数的toString方法 即 . 那么如果我们有一个指向函数对象的引用, 我们该如何调用这个函数呢? 答案是通过FunctionN的 apply 方法, 即 FunctionN.apply() , 因此调用函数对象的方法如下:

scala> f.apply(3)
res2: Int = 4
但是如果每次调用方法对象都要通过FunctionN.apply(x, y…), 就会略显啰嗦, Scala提供一种模仿函数调用的格式来调用函数对象

scala> f(3)
res3: Int = 4
应用场景
工厂方法
在Scala中可以通过 List.apply(1, 2, 3) 创建一个List对象, apply方法定义在List类的伴生对象中, 像之前所说的, 我们可以简化apply方法, 直接通过 List(1, 2, 3) 创建一个List实例.

集合类
在Scala集合一文中提到过Iterator迭代器的几个子trait包括Seq, Set, Map都继承PartialFunction并实现了apply方法, 不同的是实现的方式不一样, 我们可以通过下面的例子来说明apply的应用

复制代码
scala> Seq(1, 2, 3).apply(1) // 检索
res6: Int = 2

scala> Set(1, 2, 3).apply(2) // 判断是否存在
res7: Boolean = true

scala> Map(“china” -> “beijing”, “US” -> “Washington”).apply(“US”) // 根据键查找值
res8: String = Washington

scala> Set(1, 2, 3)(2)
res9: Boolean = true

scala> Set(1, 2, 3)(2)
res10: Boolean = true

scala> Map(“china” -> “beijing”, “US” -> “Washington”)(“US”)
res11: String = Washington

scala的apply用法相关推荐

  1. scala apply用法

    Scala比Java更面向对象的一个方面是Scala没有静态成员.替代品是,Scala有单例对象:singleton object. 当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:c ...

  2. boost::hana::apply用法的测试程序

    boost::hana::apply用法的测试程序 实现功能 C++实现代码 实现功能 boost::hana::apply用法的测试程序 C++实现代码 #include <boost/han ...

  3. js中call与apply用法

    来源:http://blog.csdn.net/sunboy_2050/article/details/6592082 前天去面试,有个gg问了一些js知识,其中有一道call与apply用法的题目, ...

  4. js apply()用法详解

    目录 apply作用 改变this指向 将数组入参变为一般入参 把arguments改为真正的数组 尾言 apply作用 作用有两个,跟它的入参有关. 改变this指向. 将数组入参变为一般入参. 改 ...

  5. Javascript call 和 apply 用法

    Call 和 Apply 的一个小例子 function changeColor(color){this.style.backgroundColod = color; } //1 changeColo ...

  6. mysql math.max_Math.max.apply()用法

    apply的一些其他巧妙用法 Math.max.apply( null, [12,23,34,45] ); //细心的人可能已经察觉到,在我调用apply方法的时候, // 第一个参数是对象(this ...

  7. kotlin特性之object、apply用法总结

    前言 最近试用了下kotlin,因为也是一个在jvm执行的静态语言,所以快速熟悉了下语法就直接用了.但是用的过程中,还是有些地方花费了很长时间才理解.仅此记录下来 object关键字 object是k ...

  8. javascript函数进阶详细内容 函数闭包 箭头函数 call bind apply用法 偏函数 回调函数

    JS函数进阶 这次的内容我会给大家详细介绍函数方面的内容 1.箭头函数:ES6新增的定义函数的方式,箭头函数是用来简化函数定义语法的. - 箭头函数的语法: ()=>{} ()里面写形式参数,{ ...

  9. scala中apply和unapply方法

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

最新文章

  1. 首届“陇剑杯”网络安全大赛线上赛圆满结束
  2. python【蓝桥杯vip练习题库】ALGO-157 阶乘末尾(高精度)
  3. redhat6 删除mysql_Red Hat enterprise linux 6卸载默认安装的 mysql
  4. C/C++:Windows获取电脑机器指纹
  5. 渗透测试入门6之权限提升
  6. Linux之Samba部署
  7. Java 并发编程(二)对象的公布逸出和线程封闭
  8. python3 pyqt5 和eric5配置教程
  9. Tea Data Analysis System 茶饮数据分析系统
  10. 2DPCA的原理推导与实现
  11. 【Vue基础】前端工程化Vue项目
  12. 【机器学习】使用scikitLearn对数据进行聚类:Kmeans聚类算法及聚类效果评估
  13. 机器学习常用的六种分类方法,Python代码详细都在这里!
  14. 拜登留学新政:美国读博直接拿绿卡,增加H1B签证限额!但未来留美门槛反而变高了?...
  15. 推荐一款免费的内网穿透工具ngrok
  16. 全国大学生软件测试大赛Web应用测试(五)Jmeter性能测试环境配置
  17. rangeOfString
  18. 持续集成(第二版) Martin Fowler著
  19. QMT量化交易软件使用攻略(二)-策略编写
  20. Confluence 6 创建你的个人空间

热门文章

  1. Android 中的内存泄漏和内存溢出
  2. python注释出错_pycharm注释出错的原因是什么?如何解决?
  3. opera linux 64 42.0,Opera 浏览器 beta
  4. android 已经依赖了某个库,但是还是会提示Cannot resolve symbol ‘xxx‘,运行却不会报错
  5. 基于BFQ19S的共射振荡器设计(克拉泼电容三点式)
  6. QT环境中 _TCHAR 和 QString 互相转换
  7. C# Task.WaitAll 方法
  8. 【通信工程】信息类,电子类,电气工程,自动化,计算机,软件工程,机电,等相关专业 全套学习指导
  9. buuctf刷题9 (反序列化逃逸shtml-SSI远程命令执行idna与utf-8编码漏洞)
  10. gwr模型用什么做_做玻璃钢雕塑都用什么树脂