日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala学习之特殊符号,及函数

發(fā)布時(shí)間:2024/1/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Scala学习之特殊符号,及函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

1. =>符號

var equalRight = (x:Int) => x + 1 ?//--equalRight is <function1> ? 匿名函數(shù)
類似于轉(zhuǎn)化符號,=>指明這個(gè)函數(shù)把左邊的東西(任何整數(shù)x)轉(zhuǎn)變成右邊的東西(x + 1)。所以,這是一個(gè)把任何整數(shù)x映射為x + 1的函數(shù)。也可以進(jìn)行類型的強(qiáng)轉(zhuǎn).

---該解釋尚不清晰,需要進(jì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] = ahoBs
Arg value[1] = abo
Arg value[2] = alBo

3.字符串拼接 ++=

/**
? * ?String 對象是不可變的,如果你需要?jiǎng)?chuàng)建一個(gè)可以修改的字符串,可以使用 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é)果。
以下實(shí)例中,apply() 函數(shù)使用了另外一個(gè)函數(shù) f 和 值 v 作為參數(shù),而函數(shù) f 又調(diào)用了參數(shù) v:

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

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

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

實(shí)例
首先我們定義一個(gè)函數(shù):

def add(x:Int,y:Int)=x+y
那么我們應(yīng)用的時(shí)候,應(yīng)該是這樣用:add(1,2)

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

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

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

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

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

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

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

val sum = result(2)
最后打印出來的結(jié)果就是3。

完整實(shí)例
下面是一個(gè)完整實(shí)例:

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 Test
str1 + str2 = Hello, Scala!

---------------------?
作者:AhoBric?
來源:CSDN?
原文:https://blog.csdn.net/qq_31215163/article/details/54910515?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

總結(jié)

以上是生活随笔為你收集整理的Scala学习之特殊符号,及函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本一区二区欧美 | 大屁股白浆一区二区 | 后进极品美女圆润翘臀 | 激情视频激情小说 | 黄色片免费在线播放 | 四虎国产在线 | 国产一区二区视频在线免费观看 | 丝袜脚交国产在线观看 | 999精品在线视频 | 久久无码人妻丰满熟妇区毛片 | 亚洲最大视频网站 | 国产午夜三级一区二区三 | 毛片无遮挡 | 啦啦啦免费高清视频在线观看 | 欧美日韩亚洲视频 | 岛国av噜噜噜久久久狠狠av | 超碰激情 | 日韩精品一二 | 特黄在线 | 性欧美视频在线观看 | 日韩午夜激情视频 | 日韩在线二区 | 视频在线观看91 | 黄色网址最新 | 91av视频在线 | 精品一区二区三区人妻 | 国产又黄又粗又猛又爽的视频 | 草草影院一区二区三区 | 国产一区二区在线观看视频 | 午夜视频免费在线观看 | 亚洲aa视频 | 国产av精国产传媒 | 午夜av剧场| 欧洲性猛交 | 91色精品| 99视频国产精品 | 麻豆md0049免费 | 国产精品无码中文字幕 | 国产精品免费一区二区区 | 啦啦啦视频在线观看 | 久久夜色网 | 日韩色道 | 长篇高h乱肉辣文 | 亚洲欧洲色图 | 精品久久网站 | 欧美一区二区日韩一区二区 | 亚洲一区二区三区在线看 | 91精东传媒理伦片在线观看 | 久久久久99精品成人片三人毛片 | 妖精视频在线观看免费 | 双性娇喘浑圆奶水h男男漫画 | 超碰97免费 | 天堂中文视频在线 | 天天干天天操心 | www.性欧美| 在线看b | 伊人五月天 | 婷婷亚洲精品 | 国产小视频网站 | 超碰中文字幕 | 亚洲第一在线播放 | 女人扒开腿免费视频app | 欧美日韩视频一区二区 | 色老头网址| 天堂网视频 | 9人人澡人人爽人人精品 | 狠狠操操| 在线亚洲欧美 | 精品人人人 | 黄色大片在线播放 | 免费福利影院 | 欧美黄色小视频 | 国产成人精品无码片区在线 | 国产精品青青草 | 香蕉视频免费网站 | 欧美久草 | 亚洲一区二区三区高清在线 | 捆绑束缚调教 | 欧美一级黄色录像 | 青青草成人免费在线视频 | 国产在线a视频 | 五月婷婷六月香 | 午夜免费看片 | 亚洲精品一二三四 | videos麻豆 | 成熟人妻av无码专区 | 日韩av无码一区二区三区不卡 | 久久久久久一区二区 | 深夜精品| 99久久精品免费看国产 | 国产精品色婷婷99久久精品 | 国产精品久久久久久免费免熟 | 免费观看国产精品 | 91视频日本| 精品黑人一区二区三区在线观看 | 国产日韩精品一区二区三区在线 | 青青一区二区 | 精品1卡二卡三卡四卡老狼 日韩三级网 | 午夜免费精品 |