1、函数定义
/** * 函数返回Unit */ def fun() = { println("this is a function") } /** * 函数有返回值 * @return */ def fun1():Int = {1} /** * 多参数函数 * @param x 默认0 * @param y 默认0 * @return */ def fun2(x:Int = 0, y:Int = 0) = {if(x > y) x else y} /** * 递归函数 阶乘 必须要指定返回值 * @param x * @return */ def fun3(x:Int):Long = { if(x < 1) 1 else x * fun3(x - 1) }
2、函数调用
fun() println(fun1()) println("多参数函数="+fun2(2,5)) println("使用默认值的多参数函数="+fun2(1)) //默认使用第2个参数的默认值 println("使用带参数名称的多参数函数="+fun2(y = 2, x = 4))//指明了参数名称就不需要按照顺序向函数传递参数 println("递归函数解决阶乘5="+fun3(5))
3、匿名函数
//fun: (Int, Int) => Unit = $$Lambda$1098/1665837086@5be51aa val afun = (x:Int,y:Int)=>{println(s"param1=${x} param2=${y}")} //param1=2 param2=3 afun(2,3) //无参数匿名函数 val afun1 = ()=> { System.getProperty("user.dir") } afun1()
4、内嵌函数
/** * 内嵌函数 * @param x */ def fun5(x:Int): Unit ={ def fun6(s:Int) = println(s"${s}偶数") def fun7(s:Int) = println(s"${s}奇数") if(x % 2 == 0) fun6(x) else fun7(x) } fun5(34) 输出: 34偶数
5、偏函数
/** * 测试偏函数 * @param date * @param message */ def log(date:Date, message:String) = { println(date + "----" + message) } 调用: /** * log() 方法接收两个参数:date 和 message。我们在程序执行时调用了三次, * 参数 date 值都相同,message 不同。我们可以使用偏应用函数优化以上方法, * 绑定第一个 date 参数,第二个参数使用下划线(_)替换缺失的参数列表,并把这个新的函数值的索引的赋给变量 */ val date = new Date /** * logPar: String => Unit = $$Lambda$1201/1696998152@792e8181 * */ val logPar = log(date, _:String) logPar("消息1") logPar("消息2") logPar("消息3") //f: (java.util.Date, String) => Unit = $$Lambda$1205/750996693@684b26b7 val f = log _ println(f(date, "消息4"))
6、函数调用的lazy
/** * lazy 只有在使用的时候才会加载 本身这个文件是不存在的 * 如果不加lazy修饰 会报错 java.io.FileNotFoundException: D:\aa.txt (系统找不到指定的文件。) * 加了lazy修饰返回的值 file: scala.io.BufferedSource = <lazy> */ lazy val file = Source.fromFile("D:\\aa.txt") for(content <- file.getLines()) println(content)
7、函数的变长参数
/** * 变长参数 * @param num * @return */ def fun8(num:Int*):Int = { if(num.length == 0) 0 else num.head + fun8(num.tail :_*) } 调用: //函数的变长参数 println("1-10累加="+fun8(1,2,3,4,5,6,7,8,9,10)) /** * 上面的调用很不方便,使用下面的方式就很好 * :_*标注告诉编译器把Range的每个元素当作参数,而不是当作单一的参数传给函数 */ println("1-10累加="+fun8(1 to 10 :_*)) 输出: 1-10累加=55 1-10累加=55
相关推荐
scala 学习笔记 方法 函数 类 对象 特质 推断 注解 编译 隐式转换 尾递归 元组 列表
Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在Java虚拟机上,并兼容现有的Java程序。 Scala 源代码被编译成Java字节码,所以它可以运行于...
Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
Scala学习资源Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为: 不太久...
-Scala学习注意事项 主要档案 适用于实用程序的Scala脚本 -Scala spark基本演示 Scala基本-变量,数据结构 -Scala基本数据结构: array, list, tuple ,应用function, lambda带有它们的function, lambda基本。 和...
刚接触Scala,所以并不是很习惯这种函数式编程风格,就从现在的第一篇笔记开始记录这个学习过程啦!笔记来源于《Scala编程》的学习。 从文本读取文本行 初步目标: 构建一个脚本从文本读取文本行,并将它们打印出来...
scala 入门进阶、常用类库学习 项目结构 模块说明 模块 说明 目的 完成 语言核心特性、特性深度分析示例、常用函数 入门 √ 练习题-std-lib 巩固基础 √ 练习题-Scala函数式编程 函数式编程思想进阶 × scala-谜题 ...
这是我学习scala时做的笔记,应该比较全面,对于初学scala足够了。文档排版整齐、方便阅读。 另外,我在百度文库也上传过一份,不过csdn上的版本是最新的。希望可以帮助到你。 --------- 目录 --------- 概述 1 ...
NULL 博文链接:https://xiajs.iteye.com/blog/1871551
这是一份总结的学习笔记 路漫漫其修远兮,吾将上下而求索 可阅读可评论可分享可转载,希望向优秀的人学习 前言 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种...
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark...
AngularJS学习笔记(checkcheckzz).epub Everything curl.epub F# for Fun and Profit eBook.epub Gradle 实战.epub iOS的函数响应型编程.epub JVM必知必会.epub Kubernetes 指南.epub LeetBook(LeetCode详解)....
本项目记录从本科开始的各种代码片段和学习笔记,以便再实际应用中Swift造出轮子。本项目涵盖领域如下 收录的编程语言包括跑的比谁都快的C/C++,面向对象的Java和Python,函数式编程家族的Haskell、Scala和Lisp,...
matlab如何敲代码 所以你想成为一个百万富翁很棒的Python程序员?...函数式编程:Haskell,Scala,Clojure,F# 面向并行/数组处理的高性能:MATLAB / Octave,Julia,R,Rust,Go 异步/事件驱动的编