Scala:每个范围内的对象都是相同的单例吗?

瓜特林

我有一个flink应用程序。我在map函数中使用了一个对象。像这样:

.map(value => {
    import spray.json._
    import com.webtrekk.sObjects._
    import com.webtrekk.jsonProtocol._
    import com.webtrekk.salesforce._

    implicit val effortProcessing = streamProcessor.Effort
    implicit val effortConsulting = effortConsultingFormat
    var effort = value.toString.parseJson.convertTo[effortConsulting]

    streamProcessor.Effort.mapping(
        value.toString.parseJson.convertTo[effortConsulting]
    )

    effort
  })

streamProcessor是一个对象。在该对象内部是数据库的另一个服务对象。每当事件进入应用程序时,Flink都会执行此映射功能。我想知道的是:该对象每次都是相同的单例对象吗?

一个例子:

->事件进入应用程序->地图函数将执行,并且将创建一个单例对象

->下一个事件到达应用程序->地图功能将再次执行->对象将再次调用

第二个对象是相同的实例吗?

克拉克内尔

是的,没有。对象是其范围内的单例:

scala> List(1, 2).map(i => { object foo { def bar: Int = i }; foo }).map(_.bar)
res2: List[Int] = List(1, 2)

这意味着以下大致相同:

object foo extends Thing { ... }
lazy val foo = new Thing { ... }

在您的情况下,由于对象是在map函数外部声明的,因此每次都是同一实例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章