Scala中的apply方法是什么,特别是在类型定义中使用

2023-12-08

我知道apply方法在伴生对象中使用时是语法糖。 然而,什么是apply方法在类型定义中使用时如下所示?

type Applyn = {
    def apply[A](f: A=>A, n: Int, x: A): A
}

这句话之间有区别吗? 据我猜测,这句话是用于将通用函数值分配给Applyn。

例如,通过使用上面的句子,我们可以使

(Int=>Int, Int, Int)=>Int
(String=>String, Int, String)=>String

等等,只变成单一类型Applyn.

它是否正确?


您正在寻找的是一种结构类型。它不引用任何特定类型,而是引用具有方法的任何类型apply[A](f: A=>A, n: Int, x: A): A。函数具有 apply 方法,因此具有正确签名的函数适用,但也可以创建具有该 apply 方法但不是函数的类型。想象一下以下情况。

object NotAFunction {
  def apply[A](f: A=>A, n: Int, x: A): A = {...}
}

该对象没有扩展Function,因此它不是一个函数,但它仍然满足结构类型要求。

结构类型提供了很好的语法,但它们非常慢,因此应尽可能避免使用它们,特别是在性能关键的代码中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala中的apply方法是什么,特别是在类型定义中使用 的相关文章

随机推荐