我知道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(使用前将#替换为@)