Enums 我如何在礼拜堂声明枚举?

Enums 我如何在礼拜堂声明枚举?,enums,chapel,Enums,Chapel,构建一个灵活的函数,我希望它看起来像 if sensor.type == SENSOR_TYPE.DISTANCE { doSomthingEmotionallyDistant(); } else if sensor.type = SENSOR_TYPE.ANGLE { gleanAnAngelsAngle(); } 枚举是否必须在模块级别声明?你能给我举几个例子吗?或者(最好)在这里举一个 枚举是否必须在模块级别声明 没有。它们也可以在内部作用域中声明 你能给我举几个例子吗 规范和规

构建一个灵活的函数,我希望它看起来像

if sensor.type == SENSOR_TYPE.DISTANCE {
  doSomthingEmotionallyDistant();
} else if sensor.type = SENSOR_TYPE.ANGLE {
  gleanAnAngelsAngle();
}
枚举是否必须在模块级别声明?你能给我举几个例子吗?或者(最好)在这里举一个

枚举是否必须在模块级别声明

没有。它们也可以在内部作用域中声明

你能给我举几个例子吗

规范和规范中介绍了语法。据我所知,目前文档中没有太多好的例子。例如,这可能得益于一个问题或(更好的)对引物的一点贡献

或者在这里提供[一个例子]

下面是您的示例,使用工作枚举展开。注意,我已将
.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'); };