国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

Scala學習之特殊符號,及函數(shù)

2019-11-11 03:18:50
字體:
供稿:網(wǎng)友

http://www.runoob.com/scala/scala-functions.html scala函數(shù)的定義,注意一些特殊函數(shù)的書寫

1. =>符號

var equalRight = (x:Int) => x + 1  //--equalRight is <function1>   匿名函數(shù)

類似于轉(zhuǎn)化符號,=>指明這個函數(shù)把左邊的東西(任何整數(shù)x)轉(zhuǎn)變成右邊的東西(x + 1)。所以,這是一個把任何整數(shù)x映射為x + 1的函數(shù)。也可以進行類型的強轉(zhuǎn).

---該解釋尚不清晰,需要進一步發(fā)現(xiàn)。

2.<- 循環(huán)遍歷(遞歸)+參數(shù)的可變性×

def PRintStrings(args: String*) = {  var i: Int = 0  for (arg <- args) {    println("Arg value[" + i + "] = " + arg)    i = i + 1  }}

函數(shù)調(diào)用:

printStrings("ahoBs", "abo", "alBo")

結(jié)果:

Arg value[0] = ahoBsArg value[1] = abo

Arg value[2] = alBo

3.字符串拼接 ++=

/**  *  String 對象是不可變的,如果你需要創(chuàng)建一個可以修改的字符串,可以使用 String Builder 類  */  def StringTest(): Unit ={    val hello:String = "hello world!" //String 對象不可變    var len = hello.length    val buf = new StringBuilder    buf += 'a'    buf ++= "bcdef"                  //++=    println("hello say :" + hello)    println("hello's len is "+ len)    println("buf is " + buf.toString())  }

函數(shù):

1.高階函數(shù) http://www.runoob.com/scala/higher-order-functions.html

高階函數(shù)(Higher-Order Function)就是操作其他函數(shù)的函數(shù)。Scala 中允許使用高階函數(shù), 高階函數(shù)可以使用其他函數(shù)作為參數(shù),或者使用函數(shù)作為輸出結(jié)果。以下實例中,apply() 函數(shù)使用了另外一個函數(shù) f 和 值 v 作為參數(shù),而函數(shù) f 又調(diào)用了參數(shù) v:

// 函數(shù) f 和 值 v 作為參數(shù),而函數(shù) f 又調(diào)用了參數(shù) vdef apply(f:Int => String,v:Int) = f(v)def layout[A](x:A) = "[" + x.toString() + "]"函數(shù)調(diào)用:

println( apply( layout, 10) )

結(jié)果:

[10]

2.匿名函數(shù) http://www.runoob.com/scala/anonymous-functions.html

Scala 中定義匿名函數(shù)的語法很簡單,箭頭左邊是參數(shù)列表,右邊是函數(shù)體。使用匿名函數(shù)后,我們的代碼變得更簡潔了。下面的表達式就定義了一個接受一個Int類型輸入?yún)?shù)的匿名函數(shù):var inc = (x:Int) => x+1上述定義的匿名函數(shù),其實是下面這種寫法的簡寫:def add2 = new Function1[Int,Int]{ def apply(x:Int):Int = x+1; } 以上實例的 inc 現(xiàn)在可作為一個函數(shù),使用方式如下var x = inc(7)-1同樣我們可以在匿名函數(shù)中定義多個參數(shù):var mul = (x: Int, y: Int) => x*ymul 現(xiàn)在可作為一個函數(shù),使用方式如下:println(mul(3, 4))我們也可以不給匿名函數(shù)設(shè)置參數(shù),如下所示:var userDir = () => { System.getProperty("user.dir") }userDir 現(xiàn)在可作為一個函數(shù),使用方式如下:println( userDir() )實例object Demo {def main(args: Array[String]) {println( "multiplier(1) value = " + multiplier(1) )println( "multiplier(2) value = " + multiplier(2) )}var factor = 3val multiplier = (i:Int) => i * factor}將以上代碼保持到 Demo.scala 文件中,執(zhí)行以下命令:$ scalac Demo.scala$ scala Demo輸出結(jié)果為:multiplier(1) value = 3multiplier(2) value = 6

3.函數(shù)柯里化(Currying)  http://www.runoob.com/scala/currying-functions.html

柯里化(Currying)指的是將原來接受兩個參數(shù)的函數(shù)變成新的接受一個參數(shù)的函數(shù)的過程。新的函數(shù)返回一個以原有第二個參數(shù)為參數(shù)的函數(shù)。.

實例

首先我們定義一個函數(shù):

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

那么我們應(yīng)用的時候,應(yīng)該是這樣用:add(1,2)

現(xiàn)在我們把這個函數(shù)變一下形:

def add(x:Int)(y:Int) = x + y

那么我們應(yīng)用的時候,應(yīng)該是這樣用:add(1)(2),最后結(jié)果都一樣是3,這種方式(過程)就叫柯里化。

實現(xiàn)過程

add(1)(2) 實際上是依次調(diào)用兩個普通函數(shù)(非柯里化函數(shù)),第一次調(diào)用使用一個參數(shù) x,返回一個函數(shù)類型的值,第二次使用參數(shù)y調(diào)用這個函數(shù)類型的值。

實質(zhì)上最先演變成這樣一個方法:

def add(x:Int)=(y:Int)=>x+y

那么這個函數(shù)是什么意思呢? 接收一個x為參數(shù),返回一個匿名函數(shù),該匿名函數(shù)的定義是:接收一個Int型參數(shù)y,函數(shù)體為x+y?,F(xiàn)在我們來對這個方法進行調(diào)用。

val result = add(1) 

返回一個result,那result的值應(yīng)該是一個匿名函數(shù):(y:Int)=>1+y

所以為了得到結(jié)果,我們繼續(xù)調(diào)用result。

val sum = result(2)

最后打印出來的結(jié)果就是3。

完整實例

下面是一個完整實例:

object Test {   def main(args: Array[String]) {      val str1:String = "Hello, "      val str2:String = "Scala!"      println( "str1 + str2 = " +  strcat(str1)(str2) )   }   def strcat(s1: String)(s2: String) = {      s1 + s2   }}

執(zhí)行以上代碼,輸出結(jié)果為:

$ scalac Test.scala$ scala Teststr1 + str2 = Hello, Scala!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 厦门市| 鄂尔多斯市| 年辖:市辖区| 齐齐哈尔市| 新蔡县| 平和县| 元江| 九龙县| 赤壁市| 满洲里市| 温宿县| 神木县| 子洲县| 丰县| 盘山县| 新竹市| 临武县| 海盐县| 大庆市| 屯昌县| 武义县| 巢湖市| 陕西省| 买车| 二连浩特市| 伊通| 玛纳斯县| 铜山县| 丹凤县| 察雅县| 陆良县| 资兴市| 大同县| 台东县| 津南区| 郓城县| 孟津县| 宁南县| 临洮县| 洛隆县| 环江|