Как мне объявить ENUM в часовне? - PullRequest
0 голосов
/ 09 мая 2018

Создание гибкой функции, и я хочу, чтобы она выглядела как

if sensor.type == SENSOR_TYPE.DISTANCE {
  doSomthingEmotionallyDistant();
} else if sensor.type = SENSOR_TYPE.ANGLE {
  gleanAnAngelsAngle();
}

Должны ли перечисления быть объявлены на уровне модуля? Можете ли вы указать мне несколько примеров или (лучше) привести их здесь?

1 Ответ

0 голосов
/ 09 мая 2018

Должны ли перечисления быть объявлены на уровне модуля?

Нет. Они также могут быть объявлены во внутренних областях.

Можете ли вы указать мне несколько примеров

Синтаксис описан в спецификации и кратком справочном листе . Насколько я могу судить, в документации сейчас не так много хороших примеров. Это может помочь, например, из-за проблемы или (лучше) небольшого вклада в учебники для начинающих.

или приведите [пример] здесь?

Ниже приведен ваш пример, дополненный рабочим перечислением. Обратите внимание, что я изменил .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'); };
...