Scala apply()返回相同的对象
我试图了解Future是如何工作的,我遇到了它的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
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]
的对象。