Должны ли перечисления быть объявлены на уровне модуля?
Нет. Они также могут быть объявлены во внутренних областях.
Можете ли вы указать мне несколько примеров
Синтаксис описан в спецификации и кратком справочном листе . Насколько я могу судить, в документации сейчас не так много хороших примеров. Это может помочь, например, из-за проблемы или (лучше) небольшого вклада в учебники для начинающих.
или приведите [пример] здесь?
Ниже приведен ваш пример, дополненный рабочим перечислением. Обратите внимание, что я изменил .type
на .t
, поскольку .type
зарезервировано для фактического типа.
enum SENSOR_TYPE {DISTANCE, ANGLE};
record Sensor {
var t: SENSOR_TYPE;
}
var sensor = new Sensor(t=SENSOR_TYPE.DISTANCE);
if sensor.t == SENSOR_TYPE.DISTANCE {
doSomethingEmotionallyDistant();
} else if sensor.t == SENSOR_TYPE.ANGLE {
gleanAnAngelsAngle();
}
// Defined so this example will compile...
proc doSomethingEmotionallyDistant() { writeln('DISTANCE'); };
proc gleanAnAngelsAngle() { writeln('ANGLE'); };
Вы также можете «использовать» перечисление, как вы можете с модулем, чтобы представить его символы вашему пространству имен:
enum SENSOR_TYPE {DISTANCE, ANGLE};
use SENSOR_TYPE;
record Sensor {
var t: SENSOR_TYPE;
}
var sensor = new Sensor(t=DISTANCE);
if sensor.t == DISTANCE {
doSomethingEmotionallyDistant();
} else if sensor.t == ANGLE {
gleanAnAngelsAngle();
}
// Defined so this will compile...
proc doSomethingEmotionallyDistant() { writeln('DISTANCE'); };
proc gleanAnAngelsAngle() { writeln('ANGLE'); };