0
votes

Choisir entre trait et objet

J'essayais d'examiner Trait et objet dans SCALA quand il semble que nous puissions utiliser un trait et un objet pour effectuer une tâche similaire.

Que devrait être Les principes directeurs sur quand utiliser trait et quand utiliser l'objet ?

EDIT: Comme beaucoup d'entre vous demandent un exemple xxx

il existe une classe de processus qui peut utiliser l'objet xxx

nous Peut également faire utiliser le trait xxx


6 commentaires

Quand pouvez-vous utiliser un trait ou un objet pour faire une tâche similaire?


Aussi loin que je sache, les similitudes entre objet et trait ne sont plus que des similitudes entre un StarShip USS Enterprise et un demi-dessin complet de la conception dudit Starship .


J'essayais d'examiner le trait et de m'opposer à Scala quand il semble que nous puissions utiliser des traitements et objecter pour effectuer une tâche similaire. Pouvez-vous donner un exemple de la déclaration ci-dessus


Un objet ne peut pas être abstrait. Vous ne pouvez pas étendre (hériter de) un objet . Ils ne sont pas du tout très similaires.


@jwvh comme ils ne sont pas similaires mais comme j'ai donné un exemple qui devrait être la manière préférée.


Dans votre exemple, mettre la méthode addépendant () dans un objet ne semble servir aucun but. La méthode pourrait rester seule, en dehors d'un objet de et d'être aussi efficace (et moins verbose).


4 Réponses :


2
votes

objet - est une classe qui a exactement une instance. Il est créé paresseusement quand il est référencé, comme un valwon val.

comme une valeur de niveau supérieur, un objet est un singleton.

traits - sont utilisés pour partager des interfaces et des champs entre les classes.

Les classes et les objets peuvent s'étendre pendant que des traits ne peuvent pas être instanciés et n'ont donc aucun paramètre.

Donc, cela signifie que si vous préférez la mise en œuvre du type singleton avec no nouvel instance , utilisez l'objet, mais si vous souhaitez hériter implémentation à d'autres catégories ou objets que vous avez peut utiliser le trait.


0 commentaires

1
votes

traits: équivalent aux interfaces en Java. Vous pouvez donc l'utiliser pour définir des contrats publics tels que des interfaces en Java. De plus, un trait peut être utilisé pour partager des valeurs (à côté des méthodes) entre les classes étend le trait.

Les objets dans Scala sont en réalité assez flexibles. Exemple d'utilisation Les cas incluent:

  • Singletons: Si vous pensez que vos objets sont des singletons (exactement Une instance existe dans le programme), vous pouvez utiliser un objet.
  • usine: par exemple, l'objet compagnon d'une classe peut être utilisé comme usine pour créer des instances de la classe.
  • Pour partager des méthodes statiques: Par exemple, des utilitaires communes peuvent être déclarées dans un seul objet.

0 commentaires

0
votes

Je pense que la vraie question ici est où puis-je mettre des fonctions autonomes? strong>

Il existe trois options. P>

dans l'emballage h3>

Vous pouvez mettre des fonctions autonomes dans le package code> code>. Cela les rend immédiatement disponibles pour l'ensemble du package code> code> mais le nom doit être significatif dans l'ensemble du package. P>

trait PercentileStats {
  protected final def addPercentile(df: DataFrame): DataFrame // implementation
}


1 commentaires

Comment la réponse la plus étendue et la plus précise répond-elle réellement à la question «quand utiliser» la question est révélée?



0
votes

Vous devez également déterminer comment vous voudriez utiliser / importer.

trait Foo {
   def test(): String
}

object Bar extends Foo


import Bar._


0 commentaires