scala方法、函数定义及互相转化

方法定义:

尽量用规范的去写,便于维护
def 方法名(形参:参数类型):返回值类型 = {
函数体
最后一行为返回值,可以不指定return关键字
}
没有入参的函数,调用可以不用写括号,返回值类型也可以不写,没特殊必要,一般不写;

object helloworld {
  def main(args: Array[String]): Unit = {
    println(add(10,20))
    sayhello()
    sayhello     // 没有参数的函数,调用可以不加括号
    val num = 100
    def num_sum(num2:Int) = num + num2         // 也可以在方法类再定义方法
    def num2_sum = num_sum(5) + 1
  }

  def add(num1:Int,num2:Int):Int = {
    num1 + num2
  }

  def sayhello(): Unit ={
    println("say hello!!")
    val num = 100
    num					// 指定为Unit,即使方法最后一行为变量返回也是空
  }
  
  def sum() = 1 + 2       // 方法的大括号也可以省略
  def sum = 1 + 2      // 没有形参,小括号也是合法;

  def pt(a:Int,b:Int) {
    println(a + b)            // println返回为Unit,返回时Unit时,函数定义的等于号可以不写;
  }
}


函数定义

val 函数名称:函数类型 = 函数参数列表 => 输出列表
函数的类型可以不写;
val 函数名称:输入类型的形参列表 => 输出结果的类型列表 = 函数参数列表 => 输出列表

/*
 * func:函数名称
 * =:函数声明
 * (a:Int,b:Int) => a + b:函数实现体
 * (a:Int,b:Int):函数参数列表
 * a + b:函数代码逻辑及返回
 * =>:逻辑操作
 */
val  func = (a:Int,b:Int) => a + b

val  func:(Int,Int) => Int = (a:Int,b:Int) => a + b
// 函数类型指定参数类型了,函数参数列表可以不再指定类型;
val  func:(Int,Int) => Int = (a,b) => a + b

val fun:(Int,Int,Int) => Int = (a,b,c) => a + b + c
// fun: (Int, Int, Int) => Int =    function这个3代表的是三个参数

// 函数默认参数
def add(num1:Int = 1,num2:Int=2):Int = {
    num1 + num2
}
add()
add     // 有参数,这个括号省略报错

// 可变参数,参数类型后面添加“*”字符,类python的*args
def sum(numbers:Int*):Int = {
    var result:Int = 0
    for(number <- numbers) {
        result += number
    }
    result
}   

函数方法互相转化

// 函数也可以作为函数的参数传入,也可以作为您参数传入方法
val f2 = (a:Int,b:Int) => a + b
val f1 = (a:Int,b:Int,f2:(Int,Int) = > Int) = f2(a,b)


def m3(a:Int,b:Int) = a + b
// 将函数转化成方法
def m2 = f1
 // 把方法转化成函数,右侧添加下空格+划线
val f3 = m3 _        

// ff函数使用变量a返回匿名函数(b:Int) => a + b,匿名函数返回a+b未ff函数最终返回值;
val ff = (a:Int) => (b:Int) => a + b   

你可能感兴趣的:(Scala,scala,函数,方法)