0
在課程中功能反應式編程第3周第4講Erik Meijer爲未來實現了一個重試函數,它將重試一個給定次數的計算。他指定block
作爲call_by_name參數,因爲應在每次重試時評估Future,而不僅僅評估一次。callbyname參數是否必須在功能調用的捲曲支配中包裝?
def retry(noTimes: Int)(block: =>Future[T]): Future[T] = {
if (noTimes == 0) {
Future.failed(new Exception(「Sorry」))
} else {
block fallbackTo {
retry(noTimes–1) { block }
}
}
}
我的問題是:由於block
已經call_by_name參數,是否有必要把它包裝成一個塊上調用它,或只是可讀性原因?
retry(noTimes–1) { block }
//same as?
retry(noTimes–1)(block)
與fallbackTo
def fallbackTo(that: =>Future[T]): Future[T] = {
this recoverWith {
case _ => that recoverWith { case _ ⇒ this }
}
fallbackTo { retry(noTimes–1) { block } }
//same as?
fallbackTo (retry(noTimes–1)(block))