1.在 Golang 中实现枚举
2.tolua源码分析(五)lua使用C#的进程进程enum
在 Golang 中实现枚举
在 Golang 中实现枚举,枚举可以将相关的枚举枚举常量归为一种类型,简化代码逻辑。源码源码Golang 不直接支持枚举,输入但通过使用 `iota` 和 `const` 关键字,进程进程可以实现类似功能。枚举枚举靠谱源码平台接下来,源码源码我将展示如何使用 `iota` 实现枚举,输入并通过示例说明其用途。进程进程
首先,枚举枚举了解 `iota` 关键字:`iota` 是源码源码一个标识符,可以简化使用自动递增数字的输入常量定义。每当在源代码中遇到 `const` 一词,进程进程`iota` 的枚举枚举值会重置为 0,并在每个 `const` 规范后递增。源码源码使用 `iota` 可以避免在每个常量前写连续的 `iota`,简化代码。
例如,要实现一个工作日枚举,商城源码自适应可以这样定义:
go
package main
import "fmt"
// 定义工作日枚举类型
type Weekday int
const (
Monday Weekday = iota // 开始计数
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
func main() {
fmt.Println(Monday) // 输出: 0
fmt.Println(Tuesday) // 输出: 1
fmt.Println(Friday) // 输出: 4
fmt.Println(Saturday) // 输出: 5
}
同样,可以为方向创建一个枚举:
go
package main
import "fmt"
// 定义方向枚举类型
type Direction int
const (
North Direction = iota // 开始计数
South
East
West
)
func main() {
fmt.Println(North) // 输出: 0
fmt.Println(South) // 输出: 1
fmt.Println(East) // 输出: 2
}
使用枚举类型代替硬编码的常量,可以提高代码可读性,减少逻辑错误。在 Golang 中,通过 `iota` 实现的枚举功能同样实现了这一目标,同时也简化了常量的管理与维护。
总之,尽管 Golang 不直接支持枚举,2016友价源码但通过巧妙地使用 `iota` 和 `const` 关键字,我们可以实现类似功能,为代码逻辑增加清晰度,简化常量管理。这不仅提高了代码的可读性和可维护性,也为解决实际问题提供了有力的工具。
tolua源码分析(五)lua使用C#的enum
探讨了C#枚举如何在Lua中注册以及与普通类的注册区别。以官方提供的例子为例,展示了如何将C#的教育商城网站源码UnityEngine.Space类型的枚举推送到Lua层,并在Lua层面测试了诸如tostring、ToInt、Equals等接口,验证了在Lua层可以进行枚举的相等判断,以及将int转换为枚举或将枚举转换为int的操作。
在Lua层面表示C#的枚举,例子中在第行和第行将枚举推送到Lua层。由于枚举是值类型,C#层使用了enumMap缓存装箱后的同花顺 净流入 源码object与枚举的映射关系。注册到Lua层的枚举类使用了EnumMetatable。
具体来看C#枚举注册到Lua的方法,例如在System_EnumWrap.Register方法中。在Lua层表示C#枚举的方式与普通类相似,但需要注意一些区别。
例如,当使用__tostring方法时,ToLua.ToObject将Lua栈上的userdata转换为object,通过userdata的index查找C#的object缓存,不会产生垃圾收集(GC)。同样地,ToInt方法中的CheckObject同样在C#的object缓存中查找,执行类型检查,也不会产生GC。
当比较C#的枚举与int类型时,由于使用了==操作符,这会触发装箱,产生一次GC。因此,在实际使用中应尽量避免在Lua层对C#枚举与number进行比较。而在Lua层直接比较两个C#枚举时,它们在Lua层被视为同一份userdata,因为它们来自于同一个C#缓存,index相同。
在将Lua栈上的number转换为C#枚举的实例时,IntToEnum方法在C#的UnityEngine_SpaceWrap类中实现。这个方法直接将double转换为int,再转换为UnityEngine.Space类型,避免了GC。在C#层推送到Lua层的枚举时,是从C#的缓存中取到枚举对应的object,然后推送到Lua层,也不会产生GC。
总结,在Lua使用C#的枚举时,从C#到Lua层的传递不会产生GC,在Lua层进行number与枚举类型之间的转换以及直接比较枚举时不触发GC。然而,当比较枚举与number时,会触发一次GC。针对这一情况,可以进行针对性优化。
下一节将深入研究在开发中常见的C#委托/事件如何注册到Lua函数的实现。
2024-12-28 21:102155人浏览
2024-12-28 20:292366人浏览
2024-12-28 20:271473人浏览
2024-12-28 20:041966人浏览
2024-12-28 19:00976人浏览
2024-12-28 18:411959人浏览
中国消费者报深圳讯记者黄劼)7月25日,深圳市市场监管局举行深圳市医疗器械产业服务站挂牌暨生物医药创新服务工作机制启动会仪式,标志着深圳在促进生物医药产业提档升级、提质增效上步入了新的更高起点,迈向更
1.九阳4.0铁釜电饭煲体验报告+羊肉手抓饭做法大全2.我用安卓模拟器玩保卫萝卜 为什么每次打到一半就会自动跳到主页面 求TD迷帮忙3.适合加工的胡萝卜品种有哪些?4.“萝卜快跑”首批获准在京开展大兴
1.asp网站源码谁可以给我介绍个啊!!!2.下载的asp源码怎么使用?3.网上下载了asp源码,怎么样才能运行asp网站源码谁可以给我介绍个啊!!! 推荐使用改装的CMS系统Z-Blog。在搜索