Scala与 C++ 一样,既面向过程(独立存在的函数),又面向对象(类,域,方法)
-
Scala函数定义
(1) 定义范式def functionName(arg1Name : arg1Type, arg2Name : arg2Type) = {/*Function Body*/}
[1] 定义时,与Python一样,必须由def开头
[2] Scala函数要求必须明确指定所有参数的类型,没有参数时可以省略参数列表定界的括号()。
[3] Scala不必指定函数返回值的类型,只要右侧的函数体中不包含递归的语句, Scala可以根据右侧的表达式自动推断出返回类型。
[4] 块表达式返回(代码块中最后一行的返回值就是整个函数的返回值),没有显示return
(2) 函数签名
(3) 递归函数必须声明返回类型,如Fibonacci
def Fibonacci(n : Integer) : Int = {/*...*/}
(4) 若函数体只有单行语句甚至可以不需要函数体定界括号{}
(5) 默认参数值
[1]指定方式与C++相同,参数列表中赋值。[2]调用时,以"参数名=参数值"的形式即可不按声明时顺序设置参数。
[3]可以混合使用顺序参数和指定参数,但顺序参数必须对应最左边。
(6) 变长参数
[1] argName argType*
[2] 若用一个已有的序列直接作为“变长参数函数”的参数,mismatch!此时需要使用Scala的特殊语法将参数整体拆分为单元素序列
(7) 过程
定义函数时,如果函数体直接包裹在花括号里面,而没有使用 “=” 连接,则函数的返回值类型Unit(默认) 或 显式地将返回值类型定义为Unit(此时必须写 “=”),这种函数即过程 -
Lazy值:懒加载
若将一个变量声明为lazy,则只有在第一次使用该变量时,才会计算对应地表达式。主要用于耗时操作如IO
-
Scala异常,只有catch子句与Java不一致