我需要在Lua中使用类似2D的矢量数据结构。到目前为止,我已经找到了解决这个问题的几种方法:
- 在纯Lua中定义数据类型的经典解决方案 - 缺点是它上面的所有操作(如添加)需要创建一个新的数据类型,设置metatables等.x,y存储为字段,因此具有快速访问。
- C端的经典完整用户数据解决方案 - 它可能更快,仍然允许运营商,操作代码是C端,但仍然每个操作都需要分配一个新对象。虽然没有字段的可能性,所以需要做一个自定义的__index / newindex函数来模拟x和y在Lua端可能会很慢。
- 混合方法,我们定义Lua对象但是通过C代码,x和y仍然是具有简单访问权限的字段,但函数将用C编码,因此更快?
醇>
我确实尝试过#1方法,由于效率问题,我打算转到#2或#3,但是我不知道哪一个更有效率。
远端也有可能在编译器本身硬编码数据类型,但我不认为我已经准备好了这么激烈的想法:)(这不像听起来那么疯狂,2d vector很适合原生Lua类型的双倍大小。)
这两种方法中哪一种更有效?在这些情况下,我有没有想过的任何陷阱?