2

次のコードが map 関数の ask 'callback' で id 値を閉じるかどうかを知りたいです。

val id = if (model.id.isEmpty) UUID.randomUUID().toString else model.id
val result = couchbaseActor ? SetDoc(s"user:$id", model.toJson.compactPrint)
   result map {
      case true => sender ! Right(Success(id))
      case false => sender ! Left(makeFailureFromErrorEnum(ErrorCode.DbSaveFailed, List("User", "Error occurred while saving to Couchbase")))
  }

ありがとう、アーロン

最終的な解決策:

メッセージ ハンドラ:

case SaveUserReq(model) => saveDocument[User](sender, "User", model.id, model)

意味:

def saveDocument[T:JsonWriter](requester: ActorRef, prefix: String, id: String, model: T): Unit = {
  couchbaseActor ? SetDoc(s"${prefix.toLowerCase}:$id", model.toJson.compactPrint) map {
    case true => requester ! Right(Success(id))
    case false => requester ! Left(makeFailureFromErrorEnum(ErrorCode.DbSaveFailed, List(prefix, errorCouchbaseSaveFailed)))
  }
}

支援してくれたすべての人に感謝します。

4

3 に答える 3

2
  1. idそうですね、そのまま使われていると思います。定数ですね。

  2. Victor Klang はエラーの原因を示しています:アクターsenderのメソッドへのアクセスです。thisあなたのコードは実際には次のようになります

    val id = if (model.id.isEmpty) UUID.randomUUID().toString else model.id
    val result = couchbaseActor ? SetDoc(s"user:$id", model.toJson.compactPrint)
    result map {
      case true => this.sender.tell(Right(Success(id)), self)
      case false => this.sender.tell(Left(makeFailureFromErrorEnum(ErrorCode.DbSaveFailed, List("User", "Error occurred while saving to Couchbase"))), self)
    }
    

    閉店するようthisです。

    おそらく次のようにコードを書き直します。

    val id = if (model.id.isEmpty) UUID.randomUUID().toString else model.id
    val theSender = sender
    val result = couchbaseActor ? SetDoc(s"user:$id", model.toJson.compactPrint)
    result map {
      case true => theSender ! Right(Success(id))
      case false => theSender ! Left(makeFailureFromErrorEnum(ErrorCode.DbSaveFailed, List("User", "Error occurred while saving to Couchbase")))
    }
    

    助けられる。

于 2013-08-18T17:47:45.440 に答える
1

はい、そうすべきです

クロージャの定義により

于 2013-08-16T14:17:17.643 に答える