8.1 方法
定义函数最常用的方式作为某个对象的成员,这样的函数称为方法。函数式编程的重要设计原则:程序应该被分解为许多个小函数, 每个函数都只做明确定义的任务
8.2 局部函数(处理helper function
问题)
为什么要用局部函数?
- 这些辅助函数
helper function
的名称会污染整个命名空间,一旦函数被装进可复用的类和对象中时,我们希望类的使用者不要看到这样的函数,而是直接使用类的功能 - 通常希望在后续的工作中采用其他方式重写该类时,保留删除辅助函数
helper function
的灵活性 - 除了局部变量,也可以用
private def (...)
8.3 first-class function
Scala 支持first-class function, 不仅可以定义def(...) 并调用函数,而且还可以用匿名的字面量编写函数并将它们进行传递(unnamed literals and then pass
them around as values. 个人感觉有点像python 中的lambda函数风格)
function literal vs function value
前者被编译成类,并且试运行是实例化成函数值,函数字面量存在于源码(source code),而函数值以对象(object)的方式存在于运行时(at runtime),和类 classes (source code) 与对象objects (at runtime).
8.4 字面量的short form - leave off the parameter types
someNumbers.filter((x) => x > 0)
- remove useless characters is to leave out parentheses around a parameter whose type is inferred
someNumbers.filter(x => x > 0)
8.5 占位符 _(Placeholder sysntax
)
val f = (_: Int) + (_: Int)
_ + _ 将会展开一个参数接受两个参数的函数字面量。
8.6 部分应用函数 partially applied functions
somNumber.foreach(println (_))
或者somNumber.foreach(println _)
相当于
someNumbers.foreach(x => println(x))
网友评论