scala:每个作用域中的对象都是相同的单例对象吗?

vvppvyoh  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(401)

我有一份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都执行这个map函数。我想知道的是:每次对象都是相同的单例对象吗?
举个例子:
->事件到达应用程序->将执行map函数并创建一个单例对象
->下一个事件来到应用程序->Map函数将再次执行->对象将再次调用
第二个对象是相同的示例吗?

j2qf4p5b

j2qf4p5b1#

是和否。对象是其范围内的单例:

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 函数,每次都是同一个示例。

相关问题