1.15

方法和函数
方法
语法格式:

def 方法名(参数名1:参数类型1, 参数名2:参数类型2...)[: 返回值类型] = {
//方法体
}
1
2
3
注意:

参数列表的参数类型不能省略
返回值类型可以省略,由 Scala 编译器自动推断
返回值可以不写 return ,默认就是块表达式的值
示例:定义一个方法用来获取两个整形数字的最大值并返回结果。

def getMax(num1:Int, num2:Int): Int = {
return if(num1 >= num2) num1 else num2
}

def getMax(num1:Int, num2:Int) = if(num1 >= num2) num1 else num2
1
2
3
4
5
返回值的类型推断
当定义递归方法时,不能省略返回值的类型。

示例:定义一个方法求 5 的阶乘。

def f(n:Int):Int = if(n == 1) n else n * f(n - 1)
print(f(5))
1
2
惰性方法
当记录方法返回值的变量被声明为 lazy 时,方法的执行将被推迟,直到我们再次使用该值时方法才会执行,像这样的方法就叫做惰性方法。

**注意:**lazy 不能修饰 var 类型的变量。

使用场景:

打开数据库连接
提升某些特定模块的启动时间
确保对象中的某些字段优先初始化
示例:定义一个方法获取两个整数和,使用惰性技术调用该方法,然后打印结果。

scala> def add(num1:Int, num2:Int) = num1 + num2
add: (num1: Int, num2: Int)Int

scala> lazy val sum:Int = add(1,2)
sum: Int = <lazy>

scala> print(sum)
3
1
2
3
4
5
6
7
8
方法参数
默认参数

定义方法时可以给参数一个默认值并调用无参方法,例如:

def add(num1:Int = 1, num2:Int = 1) = num1 + num2
print(add())//2
1
2
带名参数

调用方法时可以指定参数的名称进行调用,例如

def add(num1:Int = 1, num2:Int = 1) = num1 + num2
print(add(num1 = 2))//3
print(add(10))//11
1
2
3
变长参数

如果方法的参数是不固定的,可以将该方法的参数定义为变长参数。

格式:

def 方法名(参数名:参数类型*)[: 返回值类型] = {
//方法体
}
1
2
3
一个方法有且只能有一个变长参数,并且变长参数要放到参数列表的最后面。

例如:定义一个方法计算 n 个数字的和。

def getSum(nums:Int*) = nums.sum
print(getSum())//0
print(getSum(1, 2, 3, 4))//10
1
2
3
方法调用方式
后缀调用法

与 Java 相同,格式:

对象名.方法名(参数)
例如:Math.abs(-1)
1
2
中缀调用法

格式:

对象名 方法名 参数
例如:Math abs -1
1
2
在 Scala 中所有的操作符都是方法,操作符是一个方法名是符号的方法。

花括号调用法

方法只有一个参数时才能使用花括号调用法。

例如:

scala> Math.abs{
| print("求绝对值,结果是:")
| -1
| }
求绝对值,结果是:res30: Int = 1
1
2
3
4
5
无括号调用法

如果方法没有参数,可以省略方法后面的括号。

例如:定义一个无参方法打印"hello scala",使用无括号调用法

def say() = print("hello scala")
say//hello scala
1
2
如果方法的返回值类型是 Unit,这样的方法称为过程,过程的 = 可以省略不写,花括号不能省略:

def say() { print("hello scala") }

posted @ 2025-02-07 13:44  七安。  阅读(19)  评论(0)    收藏  举报