我正在努力了解Future如何运作,而我遇到了apply()
。关于apply()
启动异步计算并返回
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()
的字符串字符的长度。我怎么能这样做?
答案 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