我使用Play 2與Anorm管理數據庫訪問。我發現自己正在做的一個常見模式是:如何從閉包傳遞數據而不重複自己
val (futureChecklists, jobsLookup) =
DB.withConnection { implicit connection =>
val futureChecklists = futureChecklistRepository.getAllHavingActiveTemplateAndNonNullNextRunDate()
val jobsLookup = futureChecklistJobRepository.getAllHavingActiveTemplateAndNonNullNextRunDate()
.groupBy(_.futureChecklist.id)
.withDefaultValue(List.empty)
(futureChecklists, jobsLookup)
}
這似乎有點奇怪,因爲我必須重複自己。如果我在外部示波器中需要幾個變量,它也會變得不穩定,但我不想保持連接處於打開狀態。
是否有一種簡單的方法可以將此信息傳回而不必訴諸於var
?
我想什麼是一樣的東西:
val futureChecklists
val jobsLookup
DB.withConnection { implicit connection =>
futureChecklists = futureChecklistRepository.getAllHavingActiveTemplateAndNonNullNextRunDate()
jobsLookup = futureChecklistJobRepository.getAllHavingActiveTemplateAndNonNullNextRunDate()
.groupBy(_.futureChecklist.id)
.withDefaultValue(List.empty)
}
這樣,我不必在開始和結束時相同的元組。
我認爲這可能是有用的,如果你可以顯示你想達到的僞代碼。 – TeWu
@TeWu當然,我會添加一些 – cdmckay
您可以使用自定義貸款模式。例如,使用CheckAndJob [T](f:(CheckType,JobType)=> T)來確定:T =' – cchantep