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))
   }
 
}

 

posted on 2015-10-24 22:55  月下之风  阅读(248)  评论(0编辑  收藏  举报

导航