Switch-Case语句
警告
UnigineScript的应用范围仅限于实现与材料相关的逻辑(材料表达式,可编写脚本的材料,画笔材料)。 不要将UnigineScript用作应用程序逻辑的语言,请改用C#/C++,因为这些API是首选的。 无法保证UnigineScipt中新引擎功能的可用性(超出其应用范围),因为当前的支持级别仅假设已解决关键问题。
switch-case 条件表达式替换 if-else 表达式 。其由switch和数个case部分组成,switch部分内是对整型结果进行评估的表达式,而case部分就可能出现的整型结果和相应的动作进行定义。此语句比 if-else语句的效果更高,在测试的表达式会返回一个整数并且基于表达式的结果会生成多个分支结构的情况下优先使用switch-case表达式。
语法
源代码 (UnigineScript)
switch(expression) {
case constant:
// some_code;
break;
// …;
default:
// some_code;
break;
}
部分
示例
源代码 (UnigineScript)
注意如果某个 case 模块的结尾没有break,就会执行下一个case模块,而计算处的值大概也与所测试表达式的结果相匹配。
enum {
THREE = 3,
};
switch(6 * 1) {
case 1:
log.message("one\n");
break;
case 2:
log.message("two\n");
break;
case THREE:
log.message("three\n");
break;
case 4:
case 5:
log.message("four, five\n");
break;
default:
log.message("default\n");
break;
注意
- 在"default"与冒号之间无空白区域,同样在脚本内不应有其它带有"default"的标签。
- 用于 case类比的值为预编译值,因此如果导出的变量在类比中被当作常量使用而且使用了C++代码对此变量的值作出了更改,这种情况下会使用旧值。
可将typeid(variable_type) 作为常量在switch中的一个case中进行使用。函数会检查变量是否是某种指定的类型并执行对应的操作。
源代码 (UnigineScript)
Variable data = node.getData();
switch(typeid(data)) {
case typeid(int):
log.message("int\n");
break;
case typeid(float):
log.message("float\n");
break;
case typeid(vec3):
log.message("vec3\n");
break;
case typeid(vec4):
log.message("vec4\n");
break;
case typeid(string):
log.message("string\n");
break;
}
最新更新:
2021-04-29
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)