91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scala方法與函數的定義及使用

發布時間:2021-09-04 10:48:04 來源:億速云 閱讀:160 作者:chen 欄目:大數據

本篇內容介紹了“scala方法與函數的定義及使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

scala 方法與函數

scala方法與函數的定義及使用

scala方法與函數的定義及使用

定義方法

定義方法的基本格式是:
def 方法名稱 (參數列表):返回值類型 = 方法體,Scala中 方法規則是如果沒有入參則盡量只用方法名定義該方法。

def add(x:Int,y:Int):Int = x+y
//也可以定義成
//def add(x:Int,y:Int)=x+y
//或者
def add(x:Int,y:Int){x+y}
//沒有返回值一定要用大括號那方法體括起來

帶有參數列表的方法

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
res2: String = apple

scala> name()
<console>:9: error: not enough arguments for method apply: (index: Int)Char in class StringOps.
Unspecified value parameter index.
              name()
                  ^

scala> def name():String = System.getProperty("user.name")
name: ()String

scala> name()
res4: String = apple

scala> name
res5: String = apple

方法體是多行語句的表達式

def getSquareString(input:Double):String = {
	val square =input*input
	square.toString
}

帶有默認值的方法

默認參數,可以有多個。對位置不作要求

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*)
{ 
   for(i<-a) 
     println(i); 
}

調用:
add(1,2,3,4,5) 
或者: 
var arr = Array(1,2,3,4,5,8) 
add(arr:_*)

注意:

  1. 方法的返回值類型不可不寫,編譯器可以自動推斷出來,但是對于遞歸函數,必須制定返回類型

  2. 方法的返回值默認是方法體中最后一行表達式的值,方然也可以用return來執行返回值,但不推薦這么做

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

  4. 方法也可以沒有返回值(返回值是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 = (x:Int,y:Int)=>x+y

//調用函數
f1(1,2)

的定義方式:

val f1:(Int,Int)=>Int=(x,y)=>x+y
val f2:((Int,Int)=>Int)={(x,y)=>x+y}

val f1 = new Function2[Int,Int,Int]{
def apply(x:Int,y:Int):Int = if(x<y)y else x
}

匿名函數

(x:Int)=>x+1

無參函數

val getTheAnswer =()=>42
println(getTheAnswer())

方法和函數的區別
方法和函數的定義的語法不同
方法一般定義在某個類,特質,或者object中
方法可以共享所在類內的屬性
在函數式編程語言中,函數式”頭等公民”,可以調用它,也可以傳遞它,存放在變量中,或者作為參數傳遞給另一個函數

案例:首先定義一個方法,然后將函數傳遞到方法
 

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 = <function2>

m(f2)
res17: Int = -4


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

scala> def f2(x:Int,y:Int)= x-y
f2: (x: Int, y: Int)Int

scala> m(f2)
res3: Int = -4

scala>

方法轉換成函數

把方法作為參數傳給一個方法或者函數的時候。方法被轉換為函數
使用神奇的下劃線 _

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

scala> m1 _
res19: (Int, Int) => Int = <function2>

scala> m1(_,_)
res20: (Int, Int) => Int = <function2>

Function Type is (roughly) a type of the form (T1, ..., Tn) => U, which is a shorthand for the trait FunctionN in the standard library. Anonymous Functions and Method Values have function types, and function types can be used as part of value, variable and function declarations and definitions. In fact, it can be part of a method type.

Method Type is a non-value type. That means there is no value - no object, no instance - with a method type. As mentioned above, a Method Value actually has a Function Type. A method type is a def declaration - everything about a def except its body.

例子:

scala> def m1(x:Int) = x+3
m1: (x: Int)Int    

scala> val f1 = (x: Int) => x+3
f1: Int => Int = <function1>

看到沒,方法定義和函數定義是不是在scala的解析器signature上就有顯示了,def m1(x: Int) = x+3就是一個簡單的method的定義。signature中m1: (x: Int)Int 表示method m1有一個參數Int型參數x,返回值是Int型。

val f1 = (x: Int) => x+3則是function的定義,解析器的signature中f1: Int => Int = <function1>表示function f1的method體接受一個Int型的參數,輸出結果的類型是Int型。

從上面的例子,得出一個總結:

方法是一個以def開頭的帶有參數列表(可以無參數列表)的一個邏輯操作塊,這正如object或者class中的成員方法一樣。

函數是一個賦值給一個變量(或者常量)的匿名方法(帶或者不帶參數列表),并且通過=>轉換符號跟上邏輯代碼塊的一個表達式。=>轉換符號后面的邏輯代碼塊的寫法與method的body部分相同。

“scala方法與函數的定義及使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五莲县| 康保县| 大冶市| 唐河县| 寿阳县| 清苑县| 南昌市| 禄劝| 呼图壁县| 巢湖市| 麻阳| 桐乡市| 封开县| 南安市| 大足县| 西吉县| 扬中市| 江山市| 玉龙| 涿州市| 揭阳市| 英山县| 阿克陶县| 娄烦县| 农安县| 乌鲁木齐县| 桂阳县| 诸城市| 岑巩县| 湖北省| 藁城市| 扎赉特旗| 长海县| 张北县| 宣汉县| 贡山| 蕉岭县| 江安县| 浦江县| 昭觉县| 白河县|