我如何在 Chapel 中声明 ENUM?
How do I declare ENUMs in Chapel?
构建一个灵活的函数,我希望它看起来像
if sensor.type == SENSOR_TYPE.DISTANCE {
doSomthingEmotionallyDistant();
} else if sensor.type = SENSOR_TYPE.ANGLE {
gleanAnAngelsAngle();
}
是否必须在模块级别声明枚举?你能指出一些例子或(最好)在这里提供一个吗?
Do enums have to be declared at the Module level?
没有。它们也可以在内部范围内声明。
Can you point me to some examples
语法包含在规范和 quick reference sheet 中。据我所知,目前文档中确实没有很多很好的例子。例如,这可能受益于问题或(更好)对引物的小贡献。
or provide [an example] here?
下面是您的示例,使用工作枚举进行了扩展。请注意,我已将 .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'); };
您还可以 "use" 枚举,就像您对模块所做的那样,将它的符号暴露给您的命名空间:
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'); };
构建一个灵活的函数,我希望它看起来像
if sensor.type == SENSOR_TYPE.DISTANCE {
doSomthingEmotionallyDistant();
} else if sensor.type = SENSOR_TYPE.ANGLE {
gleanAnAngelsAngle();
}
是否必须在模块级别声明枚举?你能指出一些例子或(最好)在这里提供一个吗?
Do enums have to be declared at the Module level?
没有。它们也可以在内部范围内声明。
Can you point me to some examples
语法包含在规范和 quick reference sheet 中。据我所知,目前文档中确实没有很多很好的例子。例如,这可能受益于问题或(更好)对引物的小贡献。
or provide [an example] here?
下面是您的示例,使用工作枚举进行了扩展。请注意,我已将 .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'); };
您还可以 "use" 枚举,就像您对模块所做的那样,将它的符号暴露给您的命名空间:
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'); };