2017-03-09 4 views
-2

J'ai créé une classe qui s'étend à Counter et qui conserve les additions et les soustractions. J'essaie d'appeler xs, puis retourne la somme des fois que le nombre monte ou descend qui a été appelé sur instance par xs, Sa compilation mais son échec.Sous-typage dans Scala

class Counter { 
    private var n = 0 
    def increment() = { n = n + 1 } 
    def decrement() = { n = n - 1 } 
    def get() : Int = n 
} 

def x (xs : Counter => Unit) : Int = { 
    class foo extends Counter { 
     var count = 0 
     def incrementAndGet = {count += 1; count} 
     def decrementAndGet = {count -= 1; count} 
    } 

    val counter1 = new foo 
    xs(counter1) 
    counter1.incrementAndGet 
    counter1.decrementAndGet 
} 

Merci à tous, j'étais en mesure de le transmettre. J'avais besoin de créer une autre variable qui peut garder une trace de mes incréments et décréments, puis à l'intérieur de la def inc et def dec, je voudrais ajouter à ajouter ou soustraire du compte :)

+1

Comment est défini le compteur; que voulez-vous dire par «échouer», que voulez-vous que le code fasse, ...? Veuillez décrire votre problème en détail. – stholzm

+3

Par mes tests votre code fonctionne très bien. Je suppose que ça ne marche pas comme tu veux mais tu n'as pas décrit ce que tu veux donc c'est difficile à dire. En particulier, l'instruction 'xs (counter1)' semble être tout à fait inutile. – jwvh

+1

Il y a beaucoup de choses qui ne vont pas (ou au moins bizarre) avec ce code. Quel est le point des attributs de compteur ('n',' increment() ',' decrement() 'et' get() ')? Ils ne sont utilisés nulle part. Y a-t-il un code manquant qui l'utilise? De plus, que signifie exactement le "nombre total de fois que ce nombre augmente ou diminue"? L'incrémentation suivie de la décrémentation devrait-elle donner 2 ou 0? Pouvez-vous montrer comment appelez-vous 'x'? Que passes-tu en tant que «xs»? Quel est le point de l'invoquer? Si vous énoncez votre problème original sans vous référer à votre implémentation, nous pouvons peut-être vous guider vers une solution adaptée. – slouc

Répondre

0

Je suggère que vous jetez un oeil à les modèles de conception Java & les meilleures pratiques en premier. Votre classe foo ne s'étend pas vraiment au compteur car elle ne fait pas d'ombre ou ne remplace rien. De plus, vous devriez utiliser un singleton (compteur d'objets ...) pour garder une trace de vos ajouts & substractions. Bonne chance.

+0

Merci, j'étais en mesure de le passer. J'avais besoin de créer une autre variable qui peut garder une trace de mes incréments et décréments, puis à l'intérieur de la def inc et def dec, je voudrais ajouter à ajouter ou soustraire de compter :) – yeny314