在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Scala/ Scala 課堂:基礎(chǔ)(二)
Scala 課堂:高級(jí)類型(二)
Scala 課堂:基礎(chǔ)(三)
Scala 課堂:類型和多態(tài)類型(一)
Scala 課堂:基礎(chǔ)(二)
Scala課堂:基礎(chǔ)(五)
Scala 課堂:基礎(chǔ)(四)
Scala 課堂:基礎(chǔ)(六)
Scala 課堂:集合(二)
Scala課堂:類型和多態(tài)類型(二)
Scala 課堂:模式匹配和函數(shù)組合
Scala 課堂:高級(jí)類型(一)
Scala 課堂:集合(一)
Scala 課堂:基礎(chǔ)(一)

Scala 課堂:基礎(chǔ)(二)

這里我們轉(zhuǎn)載 Twitter 的 Scala 課堂 ,轉(zhuǎn)載的內(nèi)容基本來自 Twitter 的 Scala 課堂中文翻譯,部分有小改動(dòng).

部分應(yīng)用(Partial application)

你可以使用下劃線“”部分應(yīng)用一個(gè)函數(shù),結(jié)果將得到另一個(gè)函數(shù)。Scala 使用下劃線表示不同上下文中的不同事物,你通??梢园阉醋魇且粋€(gè)沒有命名的神奇通配符。在{ + 2 }的上下文中,它代表一個(gè)匿名參數(shù)。你可以這樣使用它:


scala>  def adder(m: Int, n: Int) = m + n
adder: (m: Int, n: Int)Int

scala> val add2 = adder(2, _:Int)
add2: Int => Int = <function1>

scala> add2(3)
res7: Int = 5

你可以部分應(yīng)用參數(shù)列表中的任意參數(shù),而不僅僅是最后一個(gè)。

柯里化函數(shù)

有時(shí)會(huì)有這樣的需求:允許別人一會(huì)在你的函數(shù)上應(yīng)用一些參數(shù),然后又應(yīng)用另外的一些參數(shù)。

例如一個(gè)乘法函數(shù),在一個(gè)場景需要選擇乘數(shù),而另一個(gè)場景需要選擇被乘數(shù)。


scala> def multiply(m: Int)(n: Int): Int = m * n
multiply: (m: Int)(n: Int)Int

你可以直接傳入兩個(gè)參數(shù)。


scala>  multiply(2)(3)
res8: Int = 6

你可以填上第一個(gè)參數(shù)并且部分應(yīng)用第二個(gè)參數(shù)。


scala> val timesTwo = multiply(2) _
timesTwo: Int => Int = <function1>

scala>  timesTwo(3)
res9: Int = 6

你可以對(duì)任何多參數(shù)函數(shù)執(zhí)行柯里化。例如之前的 adder 函數(shù)


scala>  (adder _).curried
res10: Int => (Int => Int) = <function1>

可變長度參數(shù)

這是一個(gè)特殊的語法,可以向方法傳入任意多個(gè)同類型的參數(shù)。例如要在多個(gè)字符串上執(zhí)行 String 的 capitalize 函數(shù),可以這樣寫:

scala> :paste
// Entering paste mode (ctrl-D to finish)

def capitalizeAll(args: String*) = {
  args.map { arg =>
    arg.capitalize
  }
}

// Exiting paste mode, now interpreting.

capitalizeAll: (args: String*)Seq[String]

scala>  capitalizeAll("rarity", "applejack")
res11: Seq[String] = ArrayBuffer(Rarity, Applejack)