0

私はフリンクアプリケーションを持っています。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 関数が再度実行される -> オブジェクトが再度呼び出される

2 番目のオブジェクトは同一のインスタンスですか?

4

1 に答える 1

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関数の外で宣言されているため、毎回同じインスタンスです。

于 2016-05-20T15:41:59.477 に答える