Deux façons de définir des fonctions en Scala. Quelle est la différence?

Ici est un peu Scala session qui définit et tente de certaines fonctions:

scala> def test1(str: String) = str + str;    
test1: (str: String)java.lang.String

scala> test1("ab")
res0: java.lang.String = abab

fonctionne très bien.

scala> val test2 = test1
<console>:6: error: missing arguments for method test1 in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
       val test2 = test1
                   ^

oups.

scala> val test2 = test1 _
test2: (String) => java.lang.String = <function1>

scala> test2("ab")
res1: java.lang.String = abab

fonctionne bien!

Maintenant, j'ai vu le _ syntaxe lors de pliage (_ + _, etc). Donc si je comprends bien _ signifie fondamentalement "un argument". Donc test1 _ signifie essentiellement une fonction avec un argument qui est donné à test1". Mais pourquoi n'est-ce pas exactement le même que juste test1? Pourquoi est-il une différence si j'ajoute un _?

Donc, j'ai continué à explorer...

scala> val test3 = (str: String) => str + str
test3: (String) => java.lang.String = <function1>

scala> test3("ab")
res2: java.lang.String = abab

scala> val test4 = test3
test4: (String) => java.lang.String = <function1>

Ici, il fonctionne sans _! Quelle est la différence entre un defed fonction, et un valed fonction?

  • Rex, je vais économiser un peu de temps. Vous avez déjà répondu à cette question sur la liste de diffusion sur 1/27/2010. C'était une bonne réponse, de sorte que j'ai un signet. scala-programming-language.1934581.n4.nabble.com/...
  • Heh, merci 🙂
  • Je pense qu'il ya une regrettable confusion au sujet de l'usage du terme de "fonction" / "la définition d'une fonction" à la Scala. Même la Programmation Scala dit que def définit une fonction, mais ce n'est pas tout à fait vrai selon votre définition de "fonction". I. e. une méthode qui renvoie un résultat qui est une fonction de ses paramètres, mais la méthode n'est pas une valeur de la fonction ou de la fonction de l'objet. Il serait probablement utile de faire la distinction entre ces deux usages du terme "fonction".
  • Lire retronyms réponse à ma question similaire, à partir d'avril '10. stackoverflow.com/questions/2720486/... - (ps, je QRd votre avatar, très drôle!!!)
  • En bref - la fonction vs méthode
  • double possible de les Fonctions de méthodes vs en Scala

InformationsquelleAutor aioobe | 2011-02-15