Haxe lua.Table<String, Int>: String 应该是 Int
2021-3-6 21:21:32
收藏:0
阅读:145
评论:1
我的问题是,haxe 不想将以下代码片段编译为 lua 目标。它抱怨:
Main.hx:7: characters 11-17 : String should be Int
import lua.Table;
class Main {
static public function my_test(): Table<String, Int>
{
var t: Table<String, Int> = Table.create();
t["test"] = 1; # 这里有问题
return t;
}
static public function main(): Void
{
var x = my_test();
trace(x);
}
}
如果我将有问题的行改为:
t[1] = 1; 它奇怪地不抱怨,这对我来说似乎不合逻辑,因为我认为这是错误的类型。
如果我在上面的代码片段中的某个位置放置 $type(t),它会正确地将其识别为 lua.Table<String, Int>。
我查看了 std/lua/Table.hx 的源代码,并基于其中的一些代码,在我的代码片段中使用了 untyped 关键字:t[untyped "test"] = 1; 只有这样它才生成所需的可成功执行的 lua 代码:
Main.my_test = function()
local t = ({});
t.test = 1;
do return t end;
end
尽管我期望得到以下内容:
Main.my_test = function()
local t = {};
t["test"] = 1;
do return t end;
end
那么,为什么我必须使用这个关键字?
$ haxe --version
4.2.1+bf9ff69
# 我使用以下命令进行编译
$ haxe -D lua-vanilla --main Main --lua Main.lua
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

这似乎是 Haxe 和外部库定义为
extern而不是包装在抽象类中的限制。在 std/lua/Table.hx 中,Table<A,B>被定义为实现ArrayAccess<B>。这告诉 Haxe,该类型支持使用整数进行索引和元素类型是B。它无法表示允许索引器类型为A。ArrayAccess<T>的文档说明:你可以将
lua.Table定义为抽象类的包装器,而不是以这种简单的extern的方式定义。这将使您可以适当地指定数组的 setter / getter。以下是实现此功能的示例:extern class LuaGTable<A, B> implements ArrayAccess<B> { } abstract MyLuaTable<K, V>(LuaGTable<K, V>) { inline public function new() { this = untyped __lua__("({})"); } @:arrayAccess public inline function set(k: K, v) { this[untyped k] = v; } @:arrayAccess public inline function get(k: K) { return this[untyped k]; } }使用
implements ArrayAccess<B>是为了允许在表达式this[untyped k]中使用索引运算符。Haxe 认为我们提供了一个整数值以用于索引表达式。抽象类本身提供了K/V类型的索引器。为什么 Haxe 标准库没有采用这种方法,我不知道。您可以在 GitHub 代码库中找到或提交错误以开始讨论此问题。我不认为让
Table<A,B>难以使用是有意的。