编程
Fundamentals
Setting Up Development Environment
UnigineScript
High-Level Systems
C++
C#
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
GUI
Double Precision Coordinates
应用程序接口
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
Rendering-Related Classes

Switch-Case语句

switch-case 条件表达式替换 if-else 表达式 。其由switch和数个case部分组成,switch部分内是对整型结果进行评估的表达式,而case部分就可能出现的整型结果和相应的动作进行定义。此语句比 if-else语句的效果更高,在测试的表达式会返回一个整数并且基于表达式的结果会生成多个分支结构的情况下优先使用switch-case表达式。

语法

源代码 (UnigineScript)
switch(expression) { 
	case constant: 
		// some_code;
		break;
	// …; 
	default:
		// some_code;
		break;
}

部分

  • expression为条件。
  • constant 可为整型或枚举类型或者 导出的变量。也可以是typeid(type)语句 (参看下列示例
  • default为指定的代码块标签。当列出的常量都不匹配时执行此代码块中的代码。default块为可选选项。

示例

源代码 (UnigineScript)
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;
注意如果某个 case 模块的结尾没有break,就会执行下一个case模块,而计算处的值大概也与所测试表达式的结果相匹配。
注意
  • 在"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;
}
最新更新: 2017-07-03