8.4 Class variables in User Defined Classes

Class-variables are declared, similar to instance-variables. through macro-expansion inside the :- pce_begin_class/[2,3] ... :- pce_end_class/0 definition of a class. The syntax is:

class_variable(<name>, <type>, <default>, [<summary>]).

<default> defines the value if not overruled in the Defaults file. It is a Prolog term describing an object similar to the arguments of send/[2-12].

In the following example. there is a class with the property `expert_level'. The program defines the default level to be novice. The user may change that in his/her personal Defaults file or change it while the application is running. As the value may change at runtime, there should be an instance- as well as a class-variable. Below is the skeleton for this code:

variable(expert_level, {novice,advanced,expert}, get,
         "Experience level of the user").

class_variable(expert_level, @default, novice).

expert_level(Obj, Level:{novice,advanced,expert}) :->
        send(Obj, slot, expert_level, Level),
        <handle changes>.

        ...,
        (   get(Obj, expert_level, expert)
        ->  ...
        ;   ...
        ),
        ...