混入概念
当某个特质被用于组合类时,被称为混入。
示例
/* 这是一个抽象类 */
abstract class A {
val message: String
}
/* 这是一个类,实现了抽象类A */
class B extends A {
val message = "I'm an instance of class B"
}
/* 这是一个特质,居然还可以继承自一个抽象类 */
trait C extends A {
def loudMessage = message.toUpperCase()
}
/*
一个类实现一个接口使用extends;
如果这个类有父类(使用extends);接口要换成with
*/
class D extends B with C
val d = new D
println(d.message) // I'm an instance of class B
println(d.loudMessage) // I'M AN INSTANCE OF CLASS B
高阶函数
高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。这里的术语可能有点让人困惑,我们约定,使用函数值作为参数,或者返回值为函数值的“函数”和“方法”,均称之为“高阶函数”。
说白了:就是方法的参数或者返回值,居然还可以是一个函数(高阶函数)
/* ==========高阶函数==========
* 方法的参数是函数;
* 方法的返回值也可以是函数
* */
var list2 = List(1,35,73,10)
/* 第一种写法 */
var doubleInt = (t:Int) =>
{
var t2 = t * 2 ;
println("第一种写法==循环==" + t2 )
};
list2.foreach(doubleInt)
/* 第二种写法 */
list2.foreach( t =>
{
var t2 = t * 2 ;
println("第二种写法==循环==" + t2 )
} );
/* 第三种写法
* =>左半已经可以自动推断参数的类型,那就可直接省略掉
* _不能和其它类型运算
* */
list2.foreach( println(_) )
/* 柯里化 foldLeft:计算和
*/
var result = list2.foldLeft(0)(_ + _);
println("----result----" + result )