Scala 混入、高阶函数

使用混入组合类


用于组合类的特质称为混入。

abstract class A {
    val message: String
}
class B extends A {
    val message = "I'm an instance of class B"
}
trait C extends A {
    def loudMessage = message.toUpperCase()
}
class D extends B with C

note:类D具有超类B,与混入C。

类只能有一个超类但是可以有多个混入(分别使用关键字extends与关键字with)。混入与超类可以具有相同的超类型。

高阶函数


高阶函数将其他函数作为参数或返回一个函数作为结果。因为Scala中,函数是第一类值,所以这是可能的。

# 高阶函数map()
val salaries = Seq(20000, 70000, 40000)
val doubleSalary = (x: Int)=> x * 2
val newSalaries = salaries.map(doubleSalary)

# 匿名函数传入高阶函数(编译器会自动推断参数类型,无需声明参数类型)
val ss = salaries.map(x =>x*2)


# 使用_代替参数
val sss = salaries.map(_*3)

1 方法转为函数

由于Scala编译器可以将方法转为函数,所以,可以将方法作为参数传给高阶函数。

case class WeeklyWeatherForecast(temperatures: Seq[Double]) {
    private def converCtoF(temp: Double) = temp * 1.8 + 32
    def forecastInFahrenheit: Seq[Double] = temperatures.map(converCtoF)
}

note:编译器会根据converCtoF方法自动生成一个对应函数。

2 接收函数的函数

使用高阶函数的一个理由便是减少冗余代码。

3 返回函数的函数

使用高阶函数生成函数用于一些特定的情境,例如生成URL。

val domainName = "www.example.com"
def getURL = urlBuilder(ssl=true, domainName)
val endpoint = "users"
val query = "id=1"
val url = getURL(endpoint, query)

翻译源:Scala Tour

猜你喜欢

转载自blog.csdn.net/qq_32165041/article/details/83376704