Scala函式簡單學習
阿新 • • 發佈:2018-12-22
楔子
Scala函式簡單學習
demo
package com.zhuzi
import java.util.Date
object Demo_Fun {
/**
* 1.方法定義
*
* 1.方法定義用def,函式的引數 要寫型別,不寫型別不可以。
* 2.函式的返回值型別可以不寫,會自動推斷
* 3.scala會將函式體中最後一行計算的結果當做返回值返回
* 4.可以寫“return”,寫了return要顯式的宣告方法體的放回型別。
* 5.定義方法時,如果不寫“=”,那麼無論方法體中最後一行計算的結果返回是什麼,都會被丟棄,返回Unit
* 6.方法體可以一行搞定,那麼方法體的“{... ...} ” 可以省略不寫
*/
def max(x: Int, y: Int): Int = {
if (x > y) {
x
} else {
y
}
}
def max2(x: Int, y: Int) = if (x > y) x else y
/**
* 2. 遞迴函式
* 遞迴函式要顯式的宣告返回型別
*/
def fun(x: Int): Int = {
if (x == 1) {
1
} else {
x * fun(x - 1)
}
}
/**
* 3. 函式的引數有預設值
*
*/
def sum(x: Int = 100, y: Int = 200) = x + y
/**
* 4. 可變長的引數函式
*/
def funs(s: String*) = {
println("_" * 15)
s.foreach((ele: String) => {
println(ele)
})
}
/**
* 5.匿名函式
* 1."=>"就是匿名函式
* 2.匿名函式呼叫要賦值給一個變數,呼叫直接呼叫這個變數就可以
* 3.匿名函式不能顯式的寫函式返回型別
*/
val sum5: (Int, Int) => Int = (x: Int, y: Int) => {
x + y
}
/**
* 6.偏應用函式
*
* 偏應用函式是一個表示式,將方法中不變的引數寫上,變化的引數使用“_”表示,下次直接呼叫這個偏應用表示式直接傳入變化的引數就可以
*/
def showLog(date: Date, log: String) = {
println("date is " + date + ",log is " + log)
}
val date = new Date()
showLog(date, "a")
showLog(date, "b")
showLog(date, "c")
val fun = showLog(date, _: String)
fun("aaa")
fun("bbb")
fun("ccc")
/**
* 7.巢狀函式
*/
def fun7(x: Int) = {
def fun1(num: Int): Int = {
if (num == 1) {
1
} else {
num * fun1(num - 1)
}
}
fun1(x)
}
println(fun7(5))
def main(args: Array[String]): Unit = {
println(max(12, 5))
println(max2(12, 5))
println(fun(3))
println(sum())
//如果 是第二個引數傳遞值,直接寫函式形參(應該可以這麼理解)
println(sum(y = 20))
println(funs("hello", "zhuzi"))
}
}