Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types Haxe lua.表格<;字符串,Int>;:字符串应该是Int_Types_Lua_Casting_Typeerror_Haxe - Fatal编程技术网

Types Haxe lua.表格<;字符串,Int>;:字符串应该是Int

Types Haxe lua.表格<;字符串,Int>;:字符串应该是Int,types,lua,casting,typeerror,haxe,Types,Lua,Casting,Typeerror,Haxe,我的问题是haxe不想将下面的代码段编译成lua目标。它抱怨: Main.hx:7:字符11-17:字符串应为Int import lua.Table; class Main { static public function my_test(): Table<String, Int> { var t: Table<String, Int> = Table.create(); t["test"] = 1;

我的问题是haxe不想将下面的代码段编译成lua目标。它抱怨:
Main.hx:7:字符11-17:字符串应为Int

import lua.Table;

class Main {
    static public function my_test(): Table<String, Int>
    {
        var t: Table<String, Int> = Table.create();
        t["test"] = 1; # Heres the problem
        return t;
    }

    static public function main(): Void
    {
        var x = my_test();
        trace(x);
    }
}
虽然我期望的是:

Main.my_test = function()
  local t = {};
  t["test"] = 1;
  do return t end;
end
那么,我为什么要用这个关键词呢

$ haxe --version
4.2.1+bf9ff69

# I compile with
$ haxe -D lua-vanilla --main Main --lua Main.lua

这似乎是Haxe的一个限制,以及外部库如何定义为
extern
,而不是封装在抽象中。在,
表中。这告诉Haxe,该类型支持使用整数对其进行索引,并且元素类型为
B
。它无法指示允许的索引器类型是
A
委员会的文件规定:

此接口应仅用于外部。Haxe不支持对类的自定义数组访问。但是,可以对抽象类型实现数组访问

通过这种方式,您不必将
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];
  }
}
extern类LuaGTable实现ArrayAccess{
}
抽象MyLuaTable(LuaGTable){
内联公共函数new(){
this=untyped uu lua uu({})”;
}
@:arrayAccess
公共内联函数集(k:k,v){
这个[非类型化的k]=v;
}
@:arrayAccess
公共内联函数get(k:k){
返回此[未键入的k];
}
}
使用
implements ArrayAccess
必须允许在表达式
中使用索引运算符此[untyped k]
。Haxe认为我们正在做的是为索引表达式提供一个整数值。摘要本身提供了
K
/
V
类型的索引器

我不知道为什么这不是Haxe标准库所采用的方法。您可能会在他们的GitHub存储库中发现或提交一个bug,以开始对此进行讨论。我不认为让
表格
难以使用是故意的

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];
  }
}