2017-06-26 2 views
0

Existe-t-il un moyen dans Scala d'expliquer à une fonction que vous voulez utiliser les arguments par défaut?Appel de la fonction Scala avec des arguments par défaut explicites

Exemple

def myFunction(default : Int = 0) { /* logic */ } 

myFunction(number match { 
    case 5 => 5 
    case _ => ??? 
}) 

Est-il possible de remplacer ??? quelque chose qui servira d'appeler la fonction avec la valeur par défaut? (Bien sûr, je pourrais remplacer par 0, mais prendre cet exemple pour simplifier) ​​

Merci

Répondre

3
number match { 
    case 5 => myFunction(5) 
    case _ => myFunction() 
} 

Je pense que vous pouvez le faire en utilisant modèle avec correspondancefonction appel.

+0

Merci :) C'est l'approche que j'ai suivie. – Bruno

3

La bonne façon est ce que suggère @chengpohi. La seule façon de faire exactement ce que vous avez demandé est de jouer avec la façon dont scalac met en œuvre les arguments par défaut sous le capot:

myFunction(number match { 
    case 5 => 5 
    case _ => myFunction$default$1 
}) 

Mais qui est très bien pas recommandé.

esprit également que cela ne fonctionnera probablement pas lorsqu'il est collé sans adaptation dans le REPL, parce que les choses enveloppements REPL dans des objets supplémentaires et vous devrez connaître le chemin absolu myFunction$default$1. Pour le tester dans le REPL vous devrez l'emballer dans un objet ou une classe:

scala> object Foo { 
    | def myFunction(a: Int = 0) = println(a) 
    | 
    | val number = 42 
    | myFunction(number match { 
    |  case 5 => 5 
    |  case _ => myFunction$default$1 
    | }) 
    | } 
defined object Foo 

scala> Foo 
0 
res5: Foo.type = [email protected] 
+0

Merci pour la bonne explication! – Bruno