zoukankan      html  css  js  c++  java
  • 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))
       }
     
    }
    

     

  • 相关阅读:
    C语言基础
    R安装包
    随笔
    计算机组成原理(三)--存储器的层次结构
    计算机组成原理(一)
    查找
    二叉树
    Mesos
    第三章 线性表
    第四章 栈与队列
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4907964.html
Copyright © 2011-2022 走看看