`
patoto
  • 浏览: 14510 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

haXe学习笔记(五)

    博客分类:
  • haXe
阅读更多

 

动态类型

一、可以赋任意类型的值

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是一种多平台的静态类型编程语言,它设计的目标是提供高性能、跨平台的解决方案。haXe不仅可以用于Web开发,还可以编写桌面应用、服务器端脚本和移动应用。在本学习笔记中,我们将深入...

    Professional haXe and Neko

    通过以上总结可以看出,《Professional haXe and Neko》这本书涵盖了 haXe 和 Neko 相关的广泛知识领域,从基础知识到高级应用都有涉猎,对于希望深入学习这两种语言的开发者来说是非常有价值的资源。

    haXe2语言参考手册

    haXe2语言参考手册haXe API Documentation

    Haxe 3.0垮平台开源编程语言

    Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用,还是网页;...

    intellij-haxe, IntelliJ平台的Haxe插件( IDEA,Android Studio ).zip

    intellij-haxe, IntelliJ平台的Haxe插件( IDEA,Android Studio ) 用于 IntelliJ IDEA的 Haxe插件这个插件允许你使用 IntelliJ IDEA 开发 Haxe程序。 它需要 IntelliJ IDEA 最终版或者社区版,版本 14,15,2016和...

    Atom-hxatom,atom文本编辑器包的haxe类型定义.zip

    Atom-hxatom是针对Atom文本编辑器的一个扩展,它提供了Haxe语言的类型定义,使得在使用Atom编辑Haxe代码时能获得更好的代码补全、语法高亮和错误检查等功能。Atom是一个广受欢迎的开源文本编辑器,由GitHub开发,其...

    haxe2.1 安装文件

    - **学习资源**:尽管Haxe2.1的文档可能较少,但官方文档和社区论坛(如Haxe.org和HaxeFoundation的GitHub仓库)仍然可以作为学习的起点。 总的来说,Haxe2.1是一个早期版本的Haxe,对于历史研究或特定项目可能...

    haXe2语言参考手册(英文)

    ### haXe2语言参考手册知识点详述 #### 基本类型 (Basic Types) - **定义**: 在haXe2中,基本类型是构建所有数据结构的基础。 - **示例**: 包括整型(`Int`), 浮点型(`Float`), 字符串(`String`), 布尔值(`Bool`)等...

    haxe-2.08-win.zip

    Haxe是一种多平台的编程语言,它允许开发者编写一次代码,然后编译成可以在...虽然现在可能有更新的Haxe版本,但这个早期版本对于学习Haxe的基本概念和语法仍然有价值,特别是对于历史项目或者研究旧代码的开发者来说。

    haxe:Haxe-跨平台工具包

    Haxe是一个开源工具包,可让您轻松构建针对许多主流平台的跨平台工具和应用程序。 Haxe工具包包括: Haxe编程语言,一种现代的高级严格类型的编程语言 Haxe交叉编译器,适用于许多目标的最先进的闪电般的编译器 ...

    已经部署好的HAXE最新版本(卷标2)

    已经部署好的HAXE最新版本 HAXE 3.2.0 OPENFL 3.3.2 其他库为最新版本,包含开发游戏所需全部内容

    haxe-tutorials:一些用爱制作的haxe教程

    本教程集是为那些想要学习或深入理解Haxe语言的人准备的,充满了作者的热爱与用心。 Haxe的基础知识包括语法、类型系统、类和接口、模块、包结构以及标准库的使用。Haxe语法与Java和C#类似,但更简洁,支持静态和...

    haxe nme通过jni调用android

    在IT行业中,跨平台开发是常见的需求,Haxe语言因其强大的多平台支持而备受青睐。NME(Native Media Extensions)是Haxe的一个扩展库,它允许开发者使用Haxe编写的游戏或应用运行在多个平台上,包括Android。本篇将...

    haxe语言编译成luajit 再exe进行调用

    Haxe是一种多平台的编程语言,它允许开发者编写一次代码,然后编译成不同目标平台的原生代码,包括JavaScript、C++...这个项目可能包含了Haxe源文件、编译脚本以及打包工具,是学习和实践Haxe与LuaJIT结合的宝贵资源。

    haxe3-manual

    haxe3-manual Haxe是一门新兴的开源编程语言,开发者称:“相比其他语言(Java的平台是 JVM,C#的平台是.Net,ActionScript的平台是Flash Player等等),Haxe才是真正的多平台语言。不管是开发原生iOS、Android应用...

    haxelint:[未维护,检查 haxe-checkstyle] Haxe 中 Haxe 的静态分析和样式检查

    Haxe 中 Haxe 的静态分析和样式检查 安装 来自haxelib haxelib install haxelint 手动构建 haxe build.hxml 用法 从命令行 haxelib run haxelint -s &lt;HAXE&gt; 只haxelib run haxelint寻求帮助 使用 API var file...

    Haxe-Manager:Haxe项目模板以及最终更有用的haxe实用程序已添加到VSCode

    Haxe经理使用户能够从VScode中创建haxe项目,并扩展vscode使其成为更集成的haxe IDE的功能。 如果有人想贡献项目模板,那么我将使用Haxe的内置系统,因为它足够简单,可以用于本用例。 现在,这仅对样板代码有帮助:...

    haxe-macro-samples:Haxe 宏、Haxe Magic 和 Haxe 元数据代码示例

    Haxe 宏、Haxe Magic 和 Haxe 元数据代码示例Haxe 的新手? 需要快速入门 Haxe 宏? 好吧,我们开始了。 该项目包含大量示例,可帮助您快速释放 Haxe 宏的威力。已知限制请注意,这些样本只是 - 样本。 它们绝不是...

Global site tag (gtag.js) - Google Analytics