按名称从表中解压多个lua字段

按名称从表中解压多个lua字段,lua,lua-table,unpack,Lua,Lua Table,Unpack,我可以按名称从lua中的表中解包几个命名字段吗?我知道我可以使用table.unpack将表中的编号字段解包成单独的变量,并且我还可以从表中只提取一个命名字段 locala,b=table.unpack({1,2,3}) 打印(a,b)--将打印“12” 局部t={some=1,stuff=2} 局部字段=t.some 打印(字段)--将打印“1” 但是我想知道,在php中是否有一个与下面截取的代码等价的代码 $x=[“a”=>1,“b”=>2,“c”=>3]; 列表(“a”=>$a,“c”=

我可以按名称从lua中的表中解包几个命名字段吗?我知道我可以使用
table.unpack
将表中的编号字段解包成单独的变量,并且我还可以从表中只提取一个命名字段

locala,b=table.unpack({1,2,3})
打印(a,b)--将打印“12”
局部t={some=1,stuff=2}
局部字段=t.some
打印(字段)--将打印“1”
但是我想知道,在php中是否有一个与下面截取的代码等价的代码

$x=[“a”=>1,“b”=>2,“c”=>3];
列表(“a”=>$a,“c”=>$c)=$x;
回音“$a$c”;//将打印“13”
我的用例是一个
require
,它返回一个包含许多命名字段和I的表 我只对一些感兴趣。所以现在我在做

locala=require(“file/where/I/just/need/one/field”)。_字段
本地tmp=require(“file/that/returns/table/with/many/fields”)
局部b,c=tmp.x,tmp.y

但是我想知道我是否可以在一行上完成第二个任务。

如果您要经常做这件事,您可以定义一个函数:

局部函数析构函数(tbl,…)
本地插入=table.insert
局部值={}
对于u,在ipairs{…}do中的名称
插入(值,待定[名称])
结束
返回解包(值)
结束
--测试:
局部a,b=destruct({a='a',b='b',c='c'},'a','b')
打印('a='..tostring(a)…,b='..tostring(b))
因此,在您的示例中,它将是:
local b,c=destruct(需要'file/that/returns/table/with/many/fields','x','y')


但是您不应该这样做。

如果您将表的结构更改为解包为包含表的表,那么您可以对其进行更多的控制。看看这个

> test={{},{},{}}
> test[1]={one=1,two=2,three=3}
> test[2]={eins=1,zwei=2,drei=3}
> test[3]={uno=1,dos=2,tres=3}
> check=table.unpack(test,1)
> check.one
1
> check.two
2
> check.three
3
> check=table.unpack(test,2)
> check.eins
1
> check.zwei
2
> check.drei
3
> check=table.unpack(test,3)
> check.uno
1
> check.dos
2
> check.tres
3

你是对的,一个人不应该那样做。可以说,它的可读性不如两行版本,必须先定义自定义函数,因此不适合小脚本或小项目。我希望找到一个“本机”解决方案或“没有本机解决方案”(根据我的经验,这在lua中很常见:)。谢谢你。