1、创建一个匿名结构体:var myStructure = { x: 12, name: "foo"};

2、创建一个复合匿名结构体:

var user = {name : "Nicolas",age : 32,pos : [{ x : 0, y : 0 },{ x : 1, y : -1 }],
};

有了这两步,还可以搞出更多的花样,比如定义一个变量为结构体:

 var start : { x : Int, y : Int };var target : { x : Int, y : Int };var current : { x : Int, y : Int };

引入typedef

typedef Point = { x : Int, y : Int }class Path {var start : Point;var target : Point;var current : Point;
}

甚至匿名结构体还可以继承:

typedef Point3 = { > Point, z : Int } //这样就多了一个z的成员

为了适配js,甚至可以引入字符串作为key例如:

var point = { "x" : 1, "y" : -5 };

也可以用类的方式定义结构体:

typedef Point = {var x : Int;var y : Int;
}

--------------------

结构体的可选项:

typedef User = {age : Int,name : String,?phoneNumber : String
}

用元数据的方式定义可选项:

typedef User = {var age : Int;var name : String;@:optional var phoneNumber : String;
}

-----------

最后放个大招:就是结构体的动态扩展。动态扩展是动态语言的妙曼之处。直接上官方教程的例子。

typedef IterableWithLength<T> = {> Iterable<T>,// read only propertyvar length(default, null):Int;
}class Main {static public function main() {var array = [1, 2, 3];var t:IterableWithLength<Int> = array;trace(t.length);//这里的输出结果是3。}
}

直接扩展出一个length属性,这个方法本身就是数组的属性,可以绑定成结构体。

还有3.1之后还有更有意思的东西,这个呢就是动态的语言的精华所在,其他动态语言如aardio用的原型类扩展功能,而Haxe通过结构体也能做到,但我更觉得原型链扩展更好更强大。可能haxe还有其他扩展功能的途径,只是暂时我不知道罢了。官方例子如下:

typedef WithLength = {var length(default, null):Int;
}typedef IterableWithLengthAndPush<T> = {> Iterable<T>,> WithLength,function push(a:T):Int;
}class Main {static public function main() {var array = [1, 2, 3];var t:IterableWithLengthAndPush<Int> = array;}
}

Haxe的结构体与匿名结构体相关推荐

  1. go结构体初始化_go嵌套匿名结构体的初始化详解

    go匿名结构体 嵌套匿名结构体的 示例代码片. type debugConfig struct { MaxQueueDepth int `json:"maxQueueDepth"` ...

  2. Golang匿名结构体结构体嵌套(实战使用)

    背景 最近研究钉钉机器人的时候,总是会向钉钉官方接口发送很多请求,发送请求的时候,需要封装body结构体传递参数,还要封装response结构体用来接收返回值,有时候,response结构体中还要嵌套 ...

  3. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

  4. Golang结构体struct的使用(结构体嵌套, 匿名结构体等)

    转自: https://studygolang.com/articles/11313 golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但 ...

  5. Golang 匿名结构体及测试代码编写技巧

    转自: https://www.jianshu.com/p/901820e17ffb 结构体基础 结构体 (struct) 将多个不同类型的字段集中组成一种复合类型,按声明时的字段顺序初始化. typ ...

  6. C语言 匿名联合体和匿名结构体

    C语言 匿名联合体和匿名结构体 匿名联合体和匿名结构体顾名思义,就是没有名字的联合体和结构体,没有名字哪怎么用?拿来用? 在嵌入式数据通信里面,大部分都是使用联合体,将有实际意义的结构体和字节数组互相 ...

  7. C语言中的匿名结构体

    在 C 的 C11 标准中,添加了匿名结构和匿名联合. 匿名联合/结构也称为未命名联合/结构,由于没有名称,因此不会创建它们的直接对象(或变量),通常我们在嵌套结构或联合中使用它们. An anony ...

  8. Go 学习笔记(33)— Go 自定义类型 type(自定义结构体、结构体初始化、结构体内嵌、自定义接口)

    1. 自定义类型格式 用户自定义类型使用关键字 type ,其语法格式是: type newType oldType oldType 可以是自定义类型.预声明类型.未命名类型中的任意一种. newTy ...

  9. go 修改结构体方法_Go36-13-结构体及其方法

    结构体及其方法 结构体类型表示的是实实在在的数据结构.一个结构体类型可以包含若干个字段,每个字段通常都需要有确切的名字和类型. 结构体类型也可以不包含任何字段,这样并不是没有意义的,因为我们还可以为这 ...

最新文章

  1. 完美的代价 c语言,蓝桥杯基础练习 完美的代价
  2. 代码重构(二):类重构规则
  3. php异常处理示例,php异常处理示例
  4. PHP 数据库连接池实现
  5. Docker 解决容器时间与主机时间不一致的问题三种解决方案
  6. oracle 11.2 安装asm,oracle11r2安装asm+rac配置步骤.doc
  7. leetcode1143. 最长公共子序列(动态规划)
  8. .net 读取mysql数据库配置文件_.NETCore添加及读取默认配置文件信息
  9. ajax post 传参数加引号和不加引号的区别
  10. 佳能c3320怎么设置接收方_入门级单反相机佳能800D是否值得买?在我看来价格决定一切...
  11. windows服务与其他进程使用MemoryMappedFile
  12. body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
  13. AI 时代,程序员从小白到小牛的发展攻略丨今晚直播送机械键盘!
  14. 【PDF】PDF文件分页拆分(免费方法)
  15. 好队友--超好用的函数插件大全,再也不用为excel函数使用烦恼啦
  16. 计算机网络工具软件包括,计算机网络常用工具软件
  17. 恶意代码分析实战_实验练习
  18. 【Android Studio使用教程2】Android Studio创建项目
  19. hive时间AM PM格式转化为24小时制 按小时分morning,noon 思路+演示
  20. Spring Security | 轻松搞定认证授权~

热门文章

  1. 常用6种消息队列介绍和对比
  2. Matlab绘制虚数和复数数据
  3. IntelliJ IDEA导入主题包
  4. 编译ppsspp源码
  5. sharepoint 2016 学习系列篇(24)-文档库应用篇-(6)文档版本控制
  6. 2022年全球及中国多功能道路检测系统行业十四五应用动态与发展建设规划报告
  7. java计算机毕业设计基于安卓/微信小程序的大学生心理测试咨询管理系统app
  8. 炸弹人c语言编码,寻求炸弹人游戏源代码?或者其他大于500行的c语言小游戏?...
  9. 提速降费的宽带和有线 想说爱你不容易
  10. 什么是embedding