第八章 函数和闭包

  • 本地函数

  • 函数式编程风格的重要设计原则是程序应该被解构成若干个小的函数,但是这些帮助函数的名称可能会污染整个命名空间。

  • 解决这样问题的办法: 将小函数设置为私有方法,或者把函数定义在别的函数之内,就如同本地变量一样,这样的函数我们称为本地函数。

  • 头等函数

  • 不仅可以定义和调用函数,还可以将其写作匿名的字面量,并把它们作为值传递。

  • 函数自面量杯编译进类,并在运行期实例化为函数值。很类似于类(源代码)和对象(运行期)的关系

  • 函数字面量的缩写和占位符

  • => 左右两边有一侧能够推断出类型就能够缩写

  • 例如:
    someNumber.filter((x: Int) => x > 0);
    someNumber.filter((x) => x > 0);
    someNumber.filter(x => x > 0);
    someNumber.filter(_ > 0);
  • 闭包

  • def makeIncreaser(more: Int) = (x: Int) => x + more;
    这里more是个自由变量,而x是绑定变量。

  • 重复参数

  • 指明参数长度可变。

  • _* 这个标注会告诉编译器把其中每个元素当作参数,而不是当作单一的参数传递。

  • 尾递归

  • 最后一个动作调用自己的函数称为尾递归函数。

  • 尾递归具有较大的局限性,因为JVM指令集使实现更加先进的尾递归形式变得很困难。如果递归是间接的就没有优化的可能性了。
文章导航