`对象Foo扩展(Bar => Baz)是什么意思?

时间:2014-07-12 03:38:35

标签: scala

我正在阅读dispatch的代码,并遇到了这个file,其中说:

object Elem extends (Res => scala.xml.Elem) {
  def apply(res: Res) =
    XML.withSAXParser(factory.newSAXParser).loadString(res.getResponseBody)
    ...

object Elem extends (Res => scala.xml.Elem)是什么意思?

2 个答案:

答案 0 :(得分:3)

A => B是用于描述anonymous functions的语法。

对象声明

object Elem extends (Res => scala.xml.Elem) { /* ... */ }

的简写
object Elem extends Function1[Res, scala.xml.Elem] { /* ... */ }

在自然语言中:Elem是一个从scala.xml.Elem对象生成Res对象的函数。

查看scaladoc for Function1表明Function1声明了一个抽象apply方法,用于实现函数的逻辑。

答案 1 :(得分:1)

它还说明了Functions are objects

  

功能是一组特征。具体而言,采用一个参数的函数是Function1特征的实例。

     

类也可以扩展Function,并且可以使用()调用这些实例。

scala> class AddOne extends Function1[Int, Int] {
     |   def apply(m: Int): Int = m + 1
     | }
defined class AddOne
  

extends Function1[Int, Int]的简短说法是extends (Int => Int)

class AddOne extends (Int => Int) {
  def apply(m: Int): Int = m + 1
}

这看起来像你问题中的语法。