《Programming in Scala 3rd》阅读笔记

Chapter 09 《Control Abstraction》

2018-06-13  本文已影响4人  liqing151
scala> def curriedSum(x: Int)(y: Int) = x + y
curriedSum: (x: Int)(y: Int)Int

获取到中间函数的做法,使用部分应用函数,传入部分参数:

curriedSum(1) _  //交出第二个函数的引用。

在这个过程中val a = curriedSum(1)_, a(4)的时候编译器可以让1存活在堆上,从而计算得到1+4=5


实现新的控制结构
def withPrintWriter(file: File, op: PrintWriter => Unit) = {
val writer = new PrintWriter(file)
try {
op(writer)
} finally {
writer.close()
}
}
def withPrintWriter(file: File)(op: PrintWriter => Unit) = {
val writer = new PrintWriter(file)
try {
op(writer)
} finally {
writer.close()
}
}

val file = new File("date.txt")
withPrintWriter(file) { writer =>
writer.println(new java.util.Date)
}

或者在currying的函数中,只有最后一个参数列表可以使用{}


传名参数
上一篇 下一篇

猜你喜欢

热点阅读