动态类型
一、可以赋任意类型的值
var dynamicVar : Dynamic;
dynamicVar = "Hello";
dynamicVar = 123;
二、可以赋值给其他任意类型变量
var dynamicVar : Dynamic;
var year : Int;
dynamicVar = "Hello";
year = dynamicVar;//会产生运行时错误
三、可以动态添加任意类型的变量,包括函数变量
var dynamicVar : Dynamic;
dynamicVar = {};
dynamicVar.id = 12;
dynamicVar.name = "Name";
dynamicVar.func = function (name:String) { trace(name); };
dynamicVar.func("Test");
四、参数化动态类:所有变量类型都必须是指定类型
var dynamicVar : Dynamic<String>;
dynamicVar = {};
dynamicVar.id = "ID";
dynamicVar.name = "Name";
五、类实现Dynamic接口:可以动态添加任意类型变量
class User implements Dynamic
{
public var name : String;
public var age : Int;
}
var u = new User();
u.name = "Name";
u.newVar = 10;//动态创建的变量,访问类里未定义的变量时,带变量名的resovle方法会被调用
六、类实现Dynamic接口,并制定参数类型:可以动态添加指定类型的变量
class User implements Dynamic<String>
{
public var name : String;
public var age : Int;
}
var u = new User();
u.name = "Name";
u.newVar = "10";
七、resolve应用
class Component implements Dynamic<String>
{
public var properties : Hash<String>;
public var metadata : Hash<String>;
public function new()
{
properties = new Hash<String>();
metadata = new Hash<String>();
properties.set("a", "b");
metadata.set("c", "d");
}
public function resolve(name : String) : String
{
//If this key exists in the metadata
if(metadata.exists(name))
return metadata.get(name);
//If this key exists as a property
if(properties.exists(name))
return properties.get(name);
//This key doesn't exist, return null.
return null;
}
}
var c = new Component();
trace(c.a);//b
八、关键字dynamic
加载方法前面的修复符,用于动态重新定义方法,只有部分平台支持,而且会降低性能
public dynamic function myFunction()
{
}
九、属性
1. 用get、set方法定义
class DuckType
{
public var id(getId, setId):Int;
public var name:String;
public function getId():Int {
return this.id;
}
public function setId(id:Int):Int {
trace(id);
return this.id = id;
}
public function new(id:Int, name:String)
{
this.id = id;
this.name = name;
}
}
2. 只读、只写
public var readOnly(getProp, null) : String;
public var writeOnly(null, setProp) : String;
3. 默认get、set
var prop(default, setX) : Int;
var prop(getX, default) : Int;
4. dynamic:动态指定get、set方法,flash平台不能使用,js平台可以使用
class C {
public var age(dynamic,dynamic) : Int;
public function new() {
}
}
var c = new C();
var my_age = 26;
Reflect.setField(c, "get_age", function() { return my_age; } );
Reflect.setField(c, "set_age", function(a) { my_age = a; return my_age; } );
trace(c.age); // 26
c.age++; // will call c.set_age(c.get_age()+1)
trace(c.age); // 27
5. null:外部无法访问,内部可以访问
public var readOnly(getProp, null) : String;
6. never:内部和外部都无法访问,甚至通过反射也不行
public var readOnly(getProp, nerver) : String;
7. 如果变量为动态类型,或者在untyped块中,则无法使用属性
var c : Dynamic = new C();
trace(c.x);//为空
分享到:
相关推荐
**haXe学习笔记(一)** haXe是一种多平台的静态类型编程语言,它设计的目标是提供高性能、跨平台的解决方案。haXe不仅可以用于Web开发,还可以编写桌面应用、服务器端脚本和移动应用。在本学习笔记中,我们将深入...
通过以上总结可以看出,《Professional haXe and Neko》这本书涵盖了 haXe 和 Neko 相关的广泛知识领域,从基础知识到高级应用都有涉猎,对于希望深入学习这两种语言的开发者来说是非常有价值的资源。
haXe2语言参考手册haXe API Documentation
Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用,还是网页;...
intellij-haxe, IntelliJ平台的Haxe插件( IDEA,Android Studio ) 用于 IntelliJ IDEA的 Haxe插件这个插件允许你使用 IntelliJ IDEA 开发 Haxe程序。 它需要 IntelliJ IDEA 最终版或者社区版,版本 14,15,2016和...
Atom-hxatom是针对Atom文本编辑器的一个扩展,它提供了Haxe语言的类型定义,使得在使用Atom编辑Haxe代码时能获得更好的代码补全、语法高亮和错误检查等功能。Atom是一个广受欢迎的开源文本编辑器,由GitHub开发,其...
- **学习资源**:尽管Haxe2.1的文档可能较少,但官方文档和社区论坛(如Haxe.org和HaxeFoundation的GitHub仓库)仍然可以作为学习的起点。 总的来说,Haxe2.1是一个早期版本的Haxe,对于历史研究或特定项目可能...
### haXe2语言参考手册知识点详述 #### 基本类型 (Basic Types) - **定义**: 在haXe2中,基本类型是构建所有数据结构的基础。 - **示例**: 包括整型(`Int`), 浮点型(`Float`), 字符串(`String`), 布尔值(`Bool`)等...
Haxe是一种多平台的编程语言,它允许开发者编写一次代码,然后编译成可以在...虽然现在可能有更新的Haxe版本,但这个早期版本对于学习Haxe的基本概念和语法仍然有价值,特别是对于历史项目或者研究旧代码的开发者来说。
Haxe是一个开源工具包,可让您轻松构建针对许多主流平台的跨平台工具和应用程序。 Haxe工具包包括: Haxe编程语言,一种现代的高级严格类型的编程语言 Haxe交叉编译器,适用于许多目标的最先进的闪电般的编译器 ...
已经部署好的HAXE最新版本 HAXE 3.2.0 OPENFL 3.3.2 其他库为最新版本,包含开发游戏所需全部内容
本教程集是为那些想要学习或深入理解Haxe语言的人准备的,充满了作者的热爱与用心。 Haxe的基础知识包括语法、类型系统、类和接口、模块、包结构以及标准库的使用。Haxe语法与Java和C#类似,但更简洁,支持静态和...
在IT行业中,跨平台开发是常见的需求,Haxe语言因其强大的多平台支持而备受青睐。NME(Native Media Extensions)是Haxe的一个扩展库,它允许开发者使用Haxe编写的游戏或应用运行在多个平台上,包括Android。本篇将...
Haxe是一种多平台的编程语言,它允许开发者编写一次代码,然后编译成不同目标平台的原生代码,包括JavaScript、C++...这个项目可能包含了Haxe源文件、编译脚本以及打包工具,是学习和实践Haxe与LuaJIT结合的宝贵资源。
haxe3-manual Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用...
Haxe 中 Haxe 的静态分析和样式检查 安装 来自haxelib haxelib install haxelint 手动构建 haxe build.hxml 用法 从命令行 haxelib run haxelint -s <HAXE> 只haxelib run haxelint寻求帮助 使用 API var file...
Haxe经理使用户能够从VScode中创建haxe项目,并扩展vscode使其成为更集成的haxe IDE的功能。 如果有人想贡献项目模板,那么我将使用Haxe的内置系统,因为它足够简单,可以用于本用例。 现在,这仅对样板代码有帮助:...
Haxe 宏、Haxe Magic 和 Haxe 元数据代码示例Haxe 的新手? 需要快速入门 Haxe 宏? 好吧,我们开始了。 该项目包含大量示例,可帮助您快速释放 Haxe 宏的威力。已知限制请注意,这些样本只是 - 样本。 它们绝不是...