如何在Chapel中声明ENUM?

时间:2018-05-08 22:02:45

标签: enums chapel

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

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

是否必须在模块级别声明枚举?你能指点我一些例子,或者(更好)在这里提供一个例子吗?

1 个答案:

答案 0 :(得分:2)

  

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

不。它们也可以在内部范围内声明。

  

你能指点我一些例子吗?

规范和quick reference sheet中介绍了语法。据我所知,目前文档中还没有很多很好的例子。例如,这可能会受益于问题或(更好)对引物的小贡献。

  

或在这里提供[示例]?

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