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))