scala 方法與函式

2021-08-30 17:59:11 字數 2795 閱讀 5060

定義方法的基本格式是:

def 方法名稱 (引數列表):返回值型別 = 方法體

def add(x:int,y:int):int = x+y

println(add(1,2))

//也可以定義成

//def add(x:int,y:int)=x+y

//或者

def add(x:int,y:int)

//沒有返回值一定要用大括號那方法體括起來

def addthenmultiply(x:int,y:int)(multipier:int):int=(x+y)*multipier 

println(addthenmultiply(1,2)(3))

scala> def name:string = system.getproperty("user.name")

name: string

scala> name

scala> name()

unspecified value parameter index.

name()

^scala> def name():string = system.getproperty("user.name")

name: ()string

scala> name()

scala> name

def getsquarestring(input:double):string =
預設引數,可以有多個。對位置不作要求

def method1(a:int=1,b:int,c:int=3)=println("a="+a+"b= "+b+"c="+c)

//呼叫

method1(b=2) //不能method1(2)

//或者

method1(1,2)//method1(a=1,b=2)

//或則

method1(1,2,3) //method1(c=1,b=2,a=3)

注意1:(可變引數一定是引數列表的最後乙個引數)

注意2:(函式內部,重複引數型別是宣告引數型別的陣列,但是如果給你乙個可變引數的方法傳乙個陣列,是會報編譯錯誤 :type mismatch ,可以使用陣列名:_*的方式傳參)

def add(a:int*) }

呼叫:add(1,2,3,4,5)

或者:

var arr = array(1,2,3,4,5,8)

add(arr:_*)

注意:

方法的返回值型別不可不寫,編譯器可以自動推斷出來,但是對於遞迴函式,必須制定返回型別

方法的返回值預設是方法體中最後一行表示式的值,方然也可以用return來執行返回值,但不推薦這麼做

若使用return來制定函式的返回值。scala的型別推斷將會失效,要顯式制定返回值型別

方法也可以沒有返回值(返回值是unit)

給方法傳遞乙個函式型別的引數:

def foo(f:int => string) =...

def bar(f:(boolean,double)=>list[string]) = ...

函式可以看做是帶有引數的表示式

函式定義的方式:

val f1 = ((a:int,b:int) =>a+b)

val f2 = (a:int,b:int) =>a+b

val f3 = (_:int)+(_:int)

val f4 :(int,int)=>int = (_+_)

函式的定義方式:

val f1 : (int,int)=>int=(x,y)=>x+y

val f2:((int,int)=>int)=

函式的定義方式

val f1 = new function2[int,int,int]
匿名函式

(x:int)=>x+1
多參函式

val f1 = (x:int,y:int)=>x+y

//呼叫函式

f1(1,2)

無參函式

val gettheanswer =()=>42

println(gettheanswer())

在函式式程式語言中,函式式」頭等公民」,可以呼叫它,也可以傳遞它,存放在變數中,或者作為引數傳遞給另乙個函式

案例:首先定義乙個方法,然後將函式傳遞到方法limian

scala> def m(f:(int,int)=>int) = f(2,6)

m: (f: (int, int) => int)int

scala> val f2 = (x:int,y:int)=>x-y

f2: (int, int) => int = m(f2)

res17: int = -4

把方法作為引數傳給乙個方法或者函式的時候。方法被轉換為函式

使用神奇的下劃線_

scala> def m1(x:int,y:int) = x+y

m1: (x: int, y: int)int

scala> m1 _

res19: (int, int) => int = scala> m1(_,_)

res20: (int, int) => int =

scala快速上手 三 Scala 方法與函式

def fun a int b int unit fun 1,1 def fun1 a int b int a b println fun1 1,2 注意點 遞迴方法 5 的階乘 def fun2 num int int print fun2 5 包含預設引數值的函式 注意 1.預設值的函式中,如果...

Scala方法與函式的區別

1.函式在scala語言中,是函式程式設計的 頭等公民 2.方法是 scala 物件導向中的概念,主要定義在類,特質,抽象類中 3.函式是乙個物件,方法本質就是類中的乙個普通的方法 4.函式可以作為引數進行傳遞,可以作為返回值返回,但是方法不行 5.方法可以通過一定的語法轉成函式 def eat 將...

Scala 方法和函式

目錄 方法的定義 函式 定義方式 方法和函式的相互轉換 遞迴函式優化 高階函式 scala 函式柯里化 currying 柯里化 閉包 def functionname 引數列表 return type abstract class test scala 方法是類的一部分,而函式是乙個物件可以賦值給...