La valeur ()
est une instance de l'unité, ce qui devrait faire l'affaire:
def execute(
goals: List[String],
profiles: List[String] = Nil,
loggingCallback: (String) => Unit = { _ =>() }): Result =
{
// method body
loggingCallback("a message")
// do something returning a Result
}
mise à jour
Si quelque chose est facultative, alors il est souvent plus logique de dire explicitement, il en résulte également un meilleur code autodocumenté:
def execute(
goals: List[String],
profiles: List[String] = Nil,
loggingCallback: Option[(String) => Unit] = None): Result =
{
// method body
loggingCallback forEach { _.apply("a message") }
// do something returning a Result
}
mise à jour 2
situations DSL-esque comme celui-ci sont également l'une des situations très peu où je vais fermer les yeux sur l'utilisation de null
à Scala:
def execute(
goals: List[String],
profiles: List[String] = Nil,
loggingCallback: (String) => Unit = null
): Result = {
// method body
val log = Option(loggingCallback) getOrElse {_ =>()}
log("a message")
// do something returning a Result
}
Notez le Option(loggingCallback)
-immédiatement convertir le loggingCallback
annulable en un bon type sécurisé Option
, puis getOrElse
pour fournir une alternative de secours.
Quel est le problème avec la façon dont vous l'avez fait? C'est plutôt concis! –
Je ne dis pas que quelque chose ne va pas dans la façon dont je l'ai spécifié. Ce que je ne sais pas, c'est si cette spécification est suffisante et/ou un bon style. – aeisele