apply()返回相同的对象

时间:2017-02-06 04:22:37

标签: scala

我正在努力了解Future如何运作,而我遇到了apply()。关于apply()

,api说了这个
  

启动异步计算并返回Future对象   计算的结果

我希望通过创建一个简单的对象来更好地理解它,其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)
}

现在,申请将返回String。我希望它返回Sample[Int]。更具体地说,我希望apply()返回Sample[Int],其中Int值将是传递给apply()的字符串字符的长度。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您似乎对一些不相关的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