3

私は将来の構成に少し慣れていないので、まだすべての一般的なパターンを把握していません.

先物のリストがありますが、リストを調整できるように、作成時に名前を先物に関連付ける必要があります。

たとえば、このような先物のリストを作成した場合、x を先物の結果に関連付けるにはどうすればよいでしょうか?

      val requestsForMaster = shardNames.map { x ⇒
        sentinel ? Request("SENTINEL", "get-master-addr-by-name", x)
      }

先物をシーケンスにするために、このようなことをします

      val mastersConfig = Future.sequence(requestsForMaster)
      mastersConfig.onSuccess {
        case x: List[Some[List[Some[ByteString]]]] ⇒
          self ! x.map {
            case Some(List(Some(host: ByteString), Some(port: ByteString))) ⇒    
              println("Host/port: " + host.utf8String + ":" + port.utf8String)
              Shard("name", host.utf8String, port.utf8String.toInt, None)
          }
      }

しかし、Shard オブジェクトを作成しようとすると、名前 (x) が使用できず、そこに必要です。

そこに名前を付けるためにこれらを構成する方法について何か考えはありますか?

編集:これが私が使用したソリューションです:

  val requestsForMaster = shardNames.map { x ⇒
        (sentinel ? Request("SENTINEL", "get-master-addr-by-name", x)).map(y ⇒ (x, y))
      }

      val mastersConfig = Future.sequence(requestsForMaster)
      mastersConfig.onSuccess {
        case x: (List[(String, Some[List[Some[ByteString]]])]) ⇒
          self ! x.map {
            case (name, Some(List(Some(host: ByteString), Some(port: ByteString)))) ⇒

              println("Name Host:port: " + name + " " + host.utf8String + ":" + port.utf8String)
              Shard("name", host.utf8String, port.utf8String.toInt, None)
          }
      }
4

1 に答える 1

2

私の理解が正しければmap、リクエスト先物で使用して、各レスポンスをシャードの名前とペアにする必要があるようです。

val requestsForMaster: List[Future[(String, Some[List[Some[ByteString]])] =
  shardNames.map { x =>
    val result = sentinel ? Request("SENTINEL", "get-master-addr-by-name", x)
    result.map(x -> _)
  }

val mastersConfig = Future.sequence(requestsForMaster)

mastersConfig.onSuccess {
  case results: List[(String, Some[List[Some[ByteString]]])] =>
    self ! results.map {
      case (x, Some(List(Some(host: ByteString), Some(port: ByteString)))) =>
        // Create the shard object.
    }
}

より一般的には、 と があれば、Future[V]と書くKことで を作成できます。Future[(K, V)]fv.map(k -> _)

于 2013-09-18T20:59:26.363 に答える