博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习之函数
阅读量:4608 次
发布时间:2019-06-09

本文共 1166 字,大约阅读时间需要 3 分钟。

scala是一种多范式编程语言,其特色之一就是函数式编程,本节就来学习它!

在变量中存放函数

val num = 3.14    val fun = ceil _  // _将ceil方法转换成了函数    println(fun(num))    val array = Array(3.14,1.4,2.0).map(fun) // 4.0 2.0 2.0

匿名函数

val triple = (x:Double) => x*3  println(triple(2.0))  Array(3.14,1.4,2.0).map((x:Double) => x*3)

高阶函数

在scala中,函数可以作为函数的参数,比如

def value(f:(Double) => Double) = f(2.5)

这个函数接受任何Double并返回Double类型的函数

value(sqrt _)

这种接收一个函数参数的函数 就被称作为高阶函数。

高阶函数也可以产出另一个函数:

def mulBy(factory : Double) = (x:Double) => x*factory  print(mulBy(3)(20))  //60

常用的高阶函数

(1 to 9) map(0.1 * _) foreach( println _)

声明下,这个不会得到你想要的结果,即 0.1 0.2 0.3 …

0.10.20.300000000000000040.40.50.60000000000000010.70000000000000010.80.9

这个是所有的编程语言都会出现的问题,scala不是个例,至于原因,请参考

(1 to 100) filter (_ % 3 == 0) foreach (println _)(1 to 9) reduceLeft(_*_)"scala is a program run on JVM".split(" ").sortWith(_.length < _.length) foreach( println _)

闭包

曾经学习JS时,闭包是我最痛苦的回忆,后来我看到过一个关于闭包比较好理解的解释:当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。

def mulBy(factory: Double) = (x: Double) => x * factory  val triple = mulBy(3)  val half = mulBy(0.5)

triple 和 half 都有各自的对函数的引用,这样的函数成为闭包,闭包由代码和代码用到的任何非局部变量定义构成。

转载于:https://www.cnblogs.com/re-myself/p/5532483.html

你可能感兴趣的文章
GoLand Dep Integration Project
查看>>
第二十一节,使用TensorFlow实现LSTM和GRU网络
查看>>
windows10下安装apache2.4并运行
查看>>
kernel: INFO: task sadc:14833 blocked for more than 120 seconds.
查看>>
【刷题】BZOJ 3998 [TJOI2015]弦论
查看>>
巧用FPGA中资源
查看>>
网络流24题之飞行员配对方案问题
查看>>
spring mvc 之@requestmapping
查看>>
linux vi编辑器
查看>>
js树形结构-----(BST)二叉树增删查
查看>>
contract
查看>>
FJUT ACM 1899 Largest Rectangle in a Histogram
查看>>
如何删除xcode项目中不再使用的图片资源
查看>>
编写用例文档
查看>>
5.3QBXT模拟赛
查看>>
java数据库连接池
查看>>
sql 2005 数据库字段类型说明
查看>>
70-528试题2:仍然是有关xml的
查看>>
入门Leaflet之小Demo
查看>>
HTTP 协议详解
查看>>