2018-11-27-scala七八章

续前文:

同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_in_Scala_study_notes_zh

第七章 内置控制结构

7.8中改为函数式风格的乘法表:

def 创建行序列(: Int) =
  for ( <- 1 to 10) yield {
    val 乘积 = ( * ).toString
    val 缩进 = " " * (4 - 乘积.length)
    缩进 + 乘积
  }

def 创建行(: Int) = 创建行序列().mkString

def 乘法表() = {
  val 表序列 =
    for ( <- 1 to 10)
    yield 创建行()

  表序列.mkString("\n")
}

第八章 函数和闭包

8.7 闭包

在运行时, 闭包牵涉的变量值可能改变, 关键在于该闭包创建的时刻变量值如何:

scala> def 创建累加器(增量: Int) = (: Int) =>  + 增量
创建累加器: (增量: Int)Int => Int

scala> val 累加器1 = 创建累加器(1)
累加器1: Int => Int = $$Lambda$1168/1847678962@36f59005

scala> val 累加器9999 = 创建累加器(9999)
累加器9999: Int => Int = $$Lambda$1168/1847678962@4a83d668

scala> 累加器1(10)
res25: Int = 11

scala> 累加器9999(10)
res26: Int = 10009

感觉书中例程还是偏IT, 本可以更接近日常, 比如这个:

val 首参数 = if (参数.length > 0) 参数[0] else ""

val 伙伴 =
  首参数 match {
    case "甜酱" => println("辣酱")
    case "羊肉" => println("泡馍")
    case "皮蛋" => println("豆腐")
    case _ => println("啥?")
  }
println(伙伴)