scala函数式编程三大特性