💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
Dynamic 类型就像 Haxe 的瑞士军刀。可以说是在语言中最为有用的部分之一,但是细想一下,没有 `Int` 和 `String` 类型你能创建什么程序呢 ^_^ ? 现在只需要看一下 Dynamic 类型的使用,更高级的用途以后进行讲解。 和你本章开始所学的相反,有许多方法把 Haxe 作为一个轻类型或者动态类型语言。Dynamic 类型是一种方法。有些精通 AS2.0 的开发者会把 Dynamic 类型比作 Flash 的对象类型,然而它们有一些不同,使用 Dynamic 类型编程会更清晰。 要使用 Dynamic 类型,输入如下代码到一个文件,保存为 `DynamicTest.hx`,然后编译为 Neko 应用: ~~~ class DynamicTest { public static function main() { var dyn:Dynamic; dyn = 16; var str:String = dyn; var int:Int = dyn; var flt:Float = dyn; trace(str + " " + int + " " + flt); } } ~~~ 如果代码正确,输出的内容应该是: ~~~ DynamicTest.hx:10: 16 16 16 ~~~ 就像你想象的,`dyn` 变量可以是 String 或者 Int 类型,变量 `dyn` 被转换为 String 或者 Int 类型,传递 `dyn` 的值到另一个变量会在编译器错误中给出结果。即使强类型定义你的 str,int和flt变量,编译工具注意到你只是从一个Dynamic类型进行赋值,你的类型被移除,三个变量被设置为 null 或者 unknown 类型,它不是任何类型。 在任何情况下,编译工具明白保存在 Dynamic 类型的数据在设计时并不知道,或者事实上运行的时候。然而,你不能强制某个类型的数据为一个新的形式。Dynamic 类型只是提供一个数据容器的方式,直到你可以推理出该对数据做什么。如果希望转换一个数据类型到另一个不同类型,需要使用转换。 当使用 Dynamic 类型时,必须记住编译工具不再能识别类型违例。重要的是,你要保持强类型规则,并且只能应用你知道的对于包含在一个 Dynamic 类型中的数据有效的函数,因为不这样做可能产生不可预期的结果和难以定位的错误。