Scala基本概念(三)——函数
来源:互联网 发布:通达信电脑炒股软件 编辑:程序博客网 时间:2024/06/10 18:36
Scala中定义函数需要给出函数的名称、参数和函数体。只要函数不是递归的,就不需要指定返回类型。
1、默认参数和 带名参数
scala> def decorate(str: String, left: String ="[",right:String="]")=left + str + right
decorate: (str: String, left: String, right: String)String
scala> decorate("Hello")
res4: String = [Hello]
该函数有两个参数,left和right,带有默认值"["和"]"。
也可以在提供参数的时候指定参数的名称,如下。
scala> decorate("Hello","<<<",">>>")
res3: String = <<<Hello>>>
如下参数是带名参数
scala> decorate(str="Hello",left="<<<",right=">>>")
res5: String = <<<Hello>>>
2、变长参数
scala> def sum(args: Int*) = {
| var result = 0
| for(arg <- args) result += arg
| result
| }
sum: (args: Int*)Int
scala> val s = sum(1, 2, 3, 4, 5, 6)
s: Int = 21
参数被当做参数序列处理,需要追加:_*
scala> val s = sum(1 to 6:_*)
s: Int = 21
3、过程
如果函数体包含在花括号中但没有前面的=号,那么返回类型就是Unit,这样的函数被称为过程(procedure),过程不返回值。
scala> def box(s: String){// 没有“=”
| var border = "-" * s.length + "--\n"
| println(border + "|" + s + "|\n" + border)
| }
box: (s: String)Unit
scala> box("Scala")
-------
|Scala|
-------
声明返回类型的写法
scala> def box(s: String):Unit = {
| var border = "-" * s.length + "--\n"
| println(border + "|" + s + "|\n" + border)
| }
4、懒值
当val被声明为lazy时,它的初始化将会被推迟,直到我们首次对它取值。
scala> lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString //该函数的功能是打开指定路径/usr/share/dict/words下的内容
words: String = <lazy>
懒值是介于val和def的中间状态
val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString // 在words被定义时即被取值
lazy val words = scala.io.Source.fromFile("/usr/share/dict/words").mkString // 在words被首次使用时取值
def words = scala.io.Source.fromFile("/usr/share/dict/words").mkString // 在每一次words被使用时取值
- Scala基本概念(三)——函数
- Scala基本概念(二)——循环
- Scala基本概念(一)
- Scala学习笔记(三)scala的函数式编程
- scala学习笔记(三)Scala函数式编程
- scala语法(三)——trait
- Tensorflow常用基本概念与函数(三)
- Scala——函数
- Scala——函数
- scala实例——三
- Scala——函数式
- Scala——函数Currying
- scala 学习(三)——Array和ArrayBuffer
- scala (9)-----Scala 函数
- Cocos2dx技术(三)——cocos2dx基本概念(一)
- Cocos2dx技术(三)——cocos2dx基本概念(二)
- Scala进阶源码实战之三——文件IO、正则表达式、高阶函数
- Scala School 笔记(三)--模式匹配与函数组合
- 代码安全与工具
- TCP和UDP的区别
- win7+VS2012下openGL开发环境配置(freeglut版)
- Eclipse使用sublime主题
- win7+VS2012下GLSL开发环境配置
- Scala基本概念(三)——函数
- 笔记-虚拟机net 方式连接网络
- LeetCode-Contains Duplicate III
- 黑幕背后的Autorelease
- Mac+Xcode下GLSL开发环境配置
- 单链表的各种操作
- iOS笔记UI--scrollview
- Golang学习笔记:语言规范之词汇元素和类型
- activity fragment 传值交互