2017-10-19 64 views
1

J'ai une classe testFactory. Le but est de pouvoir passer dans une usine, puis de consoler les résultats à des fins de démonstration. À partir de maintenant, en essayant d'appeler createProductA dans la méthode de test, le compilateur se plaindra que createProductA est unbound (Unbound value createProductA).OOP - Comment appeler une méthode de classe en interne dans Reason

Quelle est la syntaxe appropriée pour appeler une méthode en interne dans une classe?

class testFactory (factory: abstractFactory) => { 
    as _; 
    pub createProductA => factory#createProductA; 
    pub createProductB => factory#createProductB; 

    pub test() => { 
    Js.log createProductA; 
    Js.log createProductB; 
    } 
}; 
+1

Je ne sais pas si je l'ai mentionné auparavant, mais vous pouvez jeter un oeil à [section de Real World OCaml sur les classes] (https: // realworldocaml. org/v1/fr/html/classes.html). Vous pouvez utiliser [reason-tools] (https://github.com/reasonml/reason-tools) pour traduire le code OCaml en Reason. – glennsl

+0

J'ai lu ce chapitre, et je le relis constamment (dans le métro en particulier) et j'ai essayé d'utiliser _ ainsi que #. Probablement en courant pour le temps, j'ai oublié quelque chose. Mes remerciements comme toujours. –

Répondre

3

C'est là la as _; partie de la définition de la classe arrive, si vous êtes déjà demandé ce qui était pour.

createProductA et createProductB sont des méthodes et non des fonctions, elles doivent donc être appelées sur un objet. Reason/OCaml ne liera pas automatiquement l'objet courant à un nom comme this ou self, mais vous le mettra sur le compte, ce qui est précisément ce que fait as, et _ signifie, comme d'habitude, "Je m'en fous de ça ". Donc, si vous changez as _; par exemple. as self; vous pourrez référencer self comme objet courant par ailleurs.

Essayez ceci:

class testFactory (factory: abstractFactory) => { 
    as self; 
    pub createProductA => factory#createProductA; 
    pub createProductB => factory#createProductB; 

    pub test() => { 
    Js.log self#createProductA; 
    Js.log self#createProductB; 
    } 
};