Oui, l' alias de type FunctorType
n'est qu'un raccourci pour
(LocalDate, HolidayCalendar, Int, Boolean) => LocalDate
Les alias de type sont souvent utilisés pour garder le reste du code simple: vous pouvez maintenant écrire
def doSomeThing(f: FunctorType)
qui sera interprété par le compilateur comme
def doSomeThing(f: (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate)
Cela permet d'éviter de définir de nombreux types personnalisés qui ne sont que des tuples ou des fonctions définies sur d'autres types, par exemple.
Il existe également plusieurs autres cas d'utilisation intéressants pour type
, comme décrit par exemple dans ce chapitre de Programmation dans Scala .
J'ai aimé la réponse de Roland Ewald car il a décrit avec un cas d'utilisation très simple d'alias de type, et pour plus de détails, il a présenté un très beau tutoriel. Cependant, puisqu'un autre cas d'utilisation est introduit dans cet article nommé type members , je voudrais en mentionner le cas d'utilisation le plus pratique, que j'ai beaucoup aimé: (cette partie est tirée d' ici :)
Type de résumé:
T ci-dessus dit que ce type qui va être utilisé, est encore inconnu, et en fonction de la sous-classe concrète, il sera défini. La meilleure façon de toujours comprendre les concepts de programmation est de fournir un exemple: supposons que vous ayez le scénario suivant:
Ici, vous obtiendrez une erreur de compilation, car la méthode eat dans les classes Cow et Tiger ne remplace pas la méthode eat dans la classe Animal, car leurs types de paramètres sont différents. C'est Herbe dans la classe Vache et Viande dans la classe Tigre vs Nourriture dans la classe Animal qui est super classe et toutes les sous-classes doivent se conformer.
Revenons maintenant à l'abstraction de type, par le diagramme suivant et en ajoutant simplement une abstraction de type, vous pouvez définir le type de l'entrée, en fonction de la sous-classe elle-même.
Maintenant, regardez les codes suivants:
Le compilateur est content et nous améliorons notre conception. Nous pouvons nourrir notre vache avec de la vache. La nourriture et le compilateur nous empêchent de nourrir la vache avec la nourriture qui convient à Tiger. Mais que se passe-t-il si nous voulons faire la différence entre le type de vache1 AppropriéFood et vache2 SuitabeFood. En un autre mot, il serait très pratique dans certains scénarios si le chemin par lequel nous atteignons le type (bien sûr via objet) importe fondamentalement. Grâce aux fonctionnalités avancées de scala, il est possible:
Types dépendant du chemin: les objets Scala peuvent avoir des types comme membres. La signification du type dépend du chemin que vous utilisez pour y accéder. Le chemin est déterminé par la référence à un objet (c'est-à-dire une instance d'une classe). Afin d'implémenter ce scénario, vous devez définir la classe Grass à l'intérieur de la vache, c'est-à-dire que Cow est la classe externe et Grass est la classe interne. La structure sera comme ceci:
Maintenant, si vous essayez de compiler ce code:
À la ligne 4, vous verrez une erreur car Grass est maintenant une classe interne de Cow, par conséquent, pour créer une instance de Grass, nous avons besoin d'un objet vache et cet objet vache détermine le chemin. Donc 2 objets vache donnent lieu à 2 chemins différents. Dans ce scénario, cow2 veut uniquement manger de la nourriture spécialement créée pour elle. Alors:
Maintenant tout le monde est content :-)
la source
Juste un exemple pour voir comment utiliser "type" comme alias:
La définition ci-dessus définit Action comme étant un alias du type de procédures (méthodes) qui prennent une liste de paramètres vide et qui renvoient Unit.
la source