扩展`Function`类型和不扩展类型有什么区别?

时间:2018-07-27 16:06:29

标签: scala inheritance lambda subtyping

我有一个类似的功能对象:

object Doubler {
  def apply(v: Int) = v*2
}

Doubler(1)

起作用

我还可以使用lambda类型扩展它:

object Doubler extends (Int=>Int) {...}

有什么不同吗?其背后的任何原因?

2 个答案:

答案 0 :(得分:3)

区别在于您的第二个版本Doubler实现了Int => Int,而在第一个版本中却没有实现。

因此,在第二个版本中,类似val f: Int=>Int = DoublersomeList.map(Doubler)的版本将起作用,而第一个版本则无效。

答案 1 :(得分:0)

在第二个版本中,您的对象是一个函数,因此您可以在需要函数Int => Int的任何地方使用它。

扩展(Int => Int)Function1[Int, Int]是相同的。