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

时间:2016-05-20 13:46:09

标签: scala apache-flink flink-streaming flink-cep

我有一个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函数将再次执行 - > 对象将再次调用

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

1 个答案:

答案 0 :(得分:2)

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

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函数之外声明的,所以每次都是相同的实例。