J'essayais d'examiner Que devrait être Les principes directeurs sur quand utiliser EDIT:
Comme beaucoup d'entre vous demandent un exemple p> il existe une classe de processus qui peut utiliser l'objet p> nous Peut également faire utiliser le trait p> Trait code> et objet code> dans SCALA quand il semble que nous puissions utiliser un trait et un objet pour effectuer une tâche similaire. trait code> et quand utiliser l'objet code>? p>
4 Réponses :
objet - est une classe qui a exactement une instance. Il est créé paresseusement quand il est référencé, comme un valwon val. p>
comme une valeur de niveau supérieur, un objet est un singleton. p>
traits - sont utilisés pour partager des interfaces et des champs entre les classes. P>
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. p>
Donc, cela signifie que si vous préférez la mise en œuvre du type singleton avec no nouvel instance code>, utilisez l'objet, mais si vous souhaitez hériter code> implémentation à d'autres catégories ou objets que vous avez peut utiliser le trait. p>
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. p>
Les objets dans Scala sont en réalité assez flexibles. Exemple d'utilisation Les cas incluent: p>
Je pense que la vraie question ici est Il existe trois options. P> 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> dans l'emballage h3>
trait PercentileStats {
protected final def addPercentile(df: DataFrame): DataFrame // implementation
}
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?
Vous devez également déterminer comment vous voudriez utiliser / importer.
trait Foo {
def test(): String
}
object Bar extends Foo
import Bar._
Quand pouvez-vous utiliser un trait ou un objet pour faire une tâche similaire?
Aussi loin que je sache, les similitudes entre
objet code> ettrait code> ne sont plus que des similitudes entre unStarShip USS Enterprise CODE> et un demi-dessin complet de la conception duditStarship code>.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. Code> Pouvez-vous donner un exemple de la déclaration ci-dessusUn objet
code> ne peut pas être abstrait. Vous ne pouvez pasétendre code> (hériter de) un objetcode>. 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 () code> dans un objetcode> ne semble servir aucun but. La méthode pourrait rester seule, en dehors d'un objetde code> et d'être aussi efficace (et moins verbose).