我知道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
。
这是对的吗?
答案 0 :(得分:1)
您正在寻找的是结构类型。它没有引用任何特定类型,但任何具有方法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,所以它不是一个函数,但它仍然满足结构类型的要求。
结构类型提供了一个很好的语法,但它们非常慢,因此应尽可能避免使用它们,尤其是在性能关键代码中。