Je me demandais comment cela fonctionne si je veux définir une fonction qui prend un ou plusieurs paramètres et un appelable (une fonction), et pourquoi l'annotation est comme ceci.
Je vais prendre le code de ceci réponse à titre d'exemple :
// Returning T, throwing the exception on failure
@annotation.tailrec
final def retry[T](n: Int)(fn: => T): T = {
util.Try { fn } match {
case util.Success(x) => x
case _ if n > 1 => retry(n - 1)(fn)
case util.Failure(e) => throw e
}
}
Dans cette fonction, il y a quelques éléments intéressants :
- L'annotation tailrec.
- Fonction de type générique
retry[T]
- Paramètre int
- Appelable fn
Ma question porte sur le point 4. Pourquoi et comment la définition de cette fonction prend two
parenthèses rondes. Si l'on veut passer une fonction appelable à une autre fonction, faut-il toujours utiliser des crochets à côté de la "liste" des paramètres facultatifs ? Pourquoi ne pas les mettre ensemble avec les paramètres ?
Merci d'avance