scala学习笔记(7):函数(1)
函数是Scala的第一公民!
1 基本定义
scala> def max(x: Int, y: Int): Int = {
if (x > y) x
else y }
跟着是括号里带有冒号分隔的参数列表。 每个函数参数后面必须带前缀冒号的类型标注,因为Scala编译器(还有解释器,但之后我 们将只说编译器)没办法推断函数参数类型。
在max参数列表的括号之后你会看到另一个“: Int”类型标注。这个东西定义了max函数的结果类型:result type(通常可以省略,因为可以推断)。跟在函数结果类型之后的是一个等号和一对包含了函数体的大括号。 如果大括号内只有一段语句,则可以省略
scala> def max2(x: Int, y: Int) = if (x > y) x else y
当去掉方法体前面的等号时,结果类型将注定是 Unit。 不论方法体里面包含什么都不例外,因为 Scala 编译器可以把任何类型转换为 Unit。例如, 如果方法的最后结果是 String,但方法的结果类型被声明为 Unit,那么 String 将被转变 为 Unit 并失去它的值。因此,如果你本想返回一个非 Unit 的值,却忘记了等号时,那么困惑就出现了。所以为 了得到你想要的结果,你需要插入等号:
scala> def h() = { "this String gets returned!" }
h: ()java.lang.String
scala> h
res0: java.lang.String = this String gets returned!

下面是函数的几种写法
package com.persia
object FuncReturnType {
//写法一,始终带返回值
def add(x:Int,y:Int):Int={
x+y
}
def returnUnit():Unit={
println("another way to return void")
}
//写法二,省略非Unit返回值;如果没有写返回值,则根据等号后面的东西进行类型推演
def test(x:Int)={
x
}
//写法三,省略等号,返回Unit
def returnVoid(){
println("return void")
}
//写法四:省略花括号,如果函数仅包含一条语句,那么连花括号都可以选择不写
def max2(x: Int, y: Int) = if (x > y) x else y
def greet() = println("Hello, world!")
def main(args:Array[String]):Unit ={
println(add(1,2))
println(test(1))
}
}
浙公网安备 33010602011771号