变量值的函数和借贷函数
在Scala中,函数是“头等公民”,几乎所有的操作都是以函数形式进行。同样的,能够在变量中存放函数(听上去很神奇吧)。示例如下:
本段代码将ceil函数赋值给fun变量,ceil后面的_表名这是一个函数,而不是碰巧忘记给它传参。
在scala中,不需要为每个函数命名,这种没有命名的函数叫做匿名函数。如何进行匿名函数的定义呢?示例如下:
(x:Double) => 3 * x
这就是一个匿名函数。就好像在scala中能够把函数赋值给变量一样,我们可以把匿名函数赋值给变量:
valtriple = (x: Double) => 3 * x
这样的方式跟使用def定义函数一样:
deftriple(x: Double) = 3 * x
但是好处就是能够不给函数命名,就能直接将它传递给另一个函数。这种方法在使用map、filter等函数时非常常用:
由于scala有可以将函数作为参数传递给函数的特性,故从中引出了一种简单的封装模式——借贷模式。代码示例如下:
在此代码中,我们将BufferedWriter进行了封装,只要调用autoWrite函数,传入适当的参数,就可以完成字符串写入文件,而且不需要关闭BufferedWriter。使用借贷模式是对系统资源操作的封装,为了防止资源不被安全释放,其次用户不用考虑资源来自何处,如何归还等问题,只需要使用就行了。