0
讓我先解釋一下我的問題。我是一個存儲所有已知ID的存儲庫。而這個存儲庫是一個演員,讓他叫他repo
。我在此演員中定義了GetId(id: Id)
消息和GetIdReply(Option[Id])
,以便請求特定的ID並在已經存在或不存在的情況下獲得回覆。我會說很直接。使用scala + akka生成唯一的ID
現在我有另一個負責生成唯一ID的actor。所以,我想實現這個功能,如:
private def getUniqueId(): Id = {
implicit val timeout = Timeout(500.millis)
var id = Id(UUID.randomUUID().toString)
val getIdReply = repo ? GetId(Id)
getIdReply.mapTo[GetIdReply] onSuccess {
case success =>
success.id match {
case Some(matchedId) =>
// Generated ID already exists, let's call this function recursively
id = getUniqueId
case None =>
// Generated ID is OK
}
}
id
}
我試圖實現這個作爲一個遞歸和這個事情的作品只有在生成的ID是在第一次嘗試獨特。第二次和所有其他嘗試不起作用。 所以我在這裏的問題是如何正確構建這樣一個函數,將「循環」,直到ID是真正獨特的?
Thx!
最佳