Scala apply()返回相同的对象

Scala apply()返回相同的对象,scala,Scala,我试图了解Future是如何工作的,我遇到了它的apply()。api对apply() 启动异步计算并返回带有 计算的结果 我想通过创建一个简单的对象来更好地理解它,它的apply将返回带有修改字段的相同对象。例如,考虑下面的代码: object Rough extends App { trait Sample object Sample { var x: Int = 0 def apply[T](body: => T): String= { "Hel

我试图了解Future是如何工作的,我遇到了它的
apply()
。api对
apply()

启动异步计算并返回带有 计算的结果

我想通过创建一个简单的对象来更好地理解它,它的apply将返回带有修改字段的相同对象。例如,考虑下面的代码:

object Rough extends App {
  trait Sample

  object Sample {
    var x: Int = 0
    def apply[T](body: => T): String= {
      "Hello " + body
    }
  }

  val s: String = Sample.apply("World")

  print(s)
}

现在应用程序正在返回一个
字符串
。我希望它返回
Sample[Int]
。更具体地说,我希望
apply()
返回
Sample[Int]
,其中Int值将是传递给
apply()
的字符串长度。我该怎么做呢?

您似乎对一些无关的Scala主题感到困惑

首先,
apply()。它的特殊之处在于调用时可以省略名称。因此,
Sample()
只是
Sample.apply()
的一个方便的缩写

现在,如果您想要一个返回它所附加到的单例对象的方法,只需让它返回
this

object Sample {   // create a singleton object
  var x: Int = 0
  def apply(s: String): Sample.type = {
    x = s.length  // save some data
    this          // return a reference to this object
  }
}

val samp = Sample("Hi there")  // invoke the 'apply()' method
samp.x            // get the saved data --> res0: Int = 8
还有一点是,“返回一个
未来
对象”(或“一个
样本
对象”)并不意味着它返回“同一个对象”,即
对象未来
定义的对象,而是扩展
特征未来[a]
的对象。