【问题标题】:what is apply method in Scala, especially used in type definition什么是 Scala 中的 apply 方法,特别是用于类型定义
【发布时间】:2017-04-13 09:46:38
【问题描述】:

我知道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

这是正确的吗?

【问题讨论】:

  • 它被称为structural typeApplyn只是指任何有方法def apply[A](f: A=>A, n: Int, x: A): A的类型
  • 那么,它并不是指一个函数本身,而是指任何带有def apply[A](f: A=>A, n: Int, x: A): A的类型?

标签: scala generics apply


【解决方案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,所以它不是一个函数,但它仍然满足结构类型的要求。

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

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 2012-04-02
    • 1970-01-01
    • 2016-04-22
    • 2011-10-08
    • 2017-09-18
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多