Qu'est-ce qu'une fonction littérale en Scala?

qu'est Ce qu'une fonction littérale de Scala et quand dois-je utiliser?

42
demandé sur Rafe Kettler 2011-03-09 06:59:03

2 réponses

une fonction littérale est une syntaxe alternative pour définir une fonction. C'est utile lorsque vous voulez passer une fonction comme argument d'une méthode (en particulier d'un ordre supérieur, comme un pli ou une opération de filtrage), mais vous ne voulez pas définir une fonction distincte. Les littérales de fonction sont anonymes -- elles n'ont pas de nom par défaut, mais vous pouvez leur donner un nom en les liant à une variable. Une fonction littérale est définie comme suit:

(a:Int, b:Int) => a + b

vous pouvez lier les variables:

val add = (a:Int, b:Int) => a + b
add(1, 2) // Result is 3

comme je l'ai déjà dit, les littérales de fonction sont utiles pour passer comme arguments à des fonctions d'ordre supérieur. Ils sont également utiles pour définir les fonctions d'une seule couche ou d'un assistant imbriquées dans d'autres fonctions.

Un Tour de la Scala donne une assez bonne référence pour les littéraux de fonction (ils les appellent des fonctions anonymes).

68
répondu Rafe Kettler 2011-03-09 04:07:36

il pourrait être utile de comparer les littérales fonctionnelles à d'autres genres de littérales en Scala. littérales sont du sucre notionnel pour représentant des valeurs de certains types que la langue considère comme particulièrement important. Scala a les littéraux entiers, chaînes de caractères, les littéraux de chaîne, etc. Scala traite les fonctions comme des valeurs de première classe que l'on peut représenter dans le code source par des fonctions littérales. Ces valeurs de fonction habitent spécial type de fonction . Par exemple,

  • 5 est un entier littéral représentant une valeur dans Int type
  • 'a' est un caractère littéral représentant une valeur dans Char type
  • (x: Int) => x + 2 est une fonction littérale représentant une valeur dans Int => Int type de fonction

les littérales sont souvent utilisées comme des valeurs anonymes, c'est, sans cadre à une variable nommée premier. Cela aide à rendre le programme plus concis et est approprié lorsque le littéral n'est pas censé être réutilisable. Par exemple:

List(1,2,3).filter((x: Int) => x > 2)

vs.

val one: Int = 1
val two: Int = 2
val three: Int = 3
val greaterThan2: (Int => Int) = (x: Int) => x > two
List(one,two,three).filter(greaterThan2)
13
répondu Mario Galic 2016-08-06 18:46:02