J'ai besoin de récupérer une valeur de slot (en passant un nom de slot) d'une instance qui peut contenir d'autres instances. Exemple:Récupère la valeur d'un objet
(defclass MAINCONTROLLER (is-a USER)
(slot uuid
(type STRING))
(slot param
(type INSTANCE))
(multislot zones
(type INSTANCE))
(slot state
(allowed-values a b c))
(slot pump
(allowed-values on off)))
(make-instance mainController of MAINCONTROLLER
(uuid "myController123")
(param [param-mainController])
(zones [zone1] [zone2])
(state a)
(pump on))
sous le nom "PARAM" contient une instance appelée [param-mainController].
La documentation CLIPS suggère de récupérer une valeur d'intervalle avec une commande d'envoi avec put-parameter. J'ai essayé d'utiliser une fonction générique pour récupérer un paramètre uniquement en passant le nom de l'emplacement.
(defmessage-handler USER get-param (?param-name)
(printout t "Slot value: " ?self:?param-name crlf))
Mais l'exécuter je reçois:
(envoyer [mainController] état get-param)
[MSGPASS2] Une telle instance mainController Envoyer fonction.
FAUX
Quelques questions:
1) Ai-je toujours besoin de définir un (créer-accesseur lire) pour chaque emplacement que je dois lire commande withsend?
2) Pourriez-vous suggérer quelques exemples de bonnes pratiques pour extraire une valeur de slot d'une instance?
Merci, Nic