lua中 [{n,{}}] 表示什么?
2018-9-17 16:49:50
收藏:0
阅读:109
评论:2
从我理解的代码来看,我是lua的初学者。我正在尝试理解一个函数,但我陷入了以下代码的困境:
该代码片段在以下代码段中使用,最后一行:
function classify(txt_dir, img_dir, cls_list)
local acc = 0.0
local total = 0.0
local fea_img = {}
local fea_txt = {}
for fname in io.lines(cls_list) do
local imgpath = img_dir .. '/' .. fname .. '.t7'
local txtpath = txt_dir .. '/' .. fname .. '.t7'
fea_img[#fea_img + 1] = extract_img(imgpath)
fea_txt[#fea_txt + 1] = extract_txt(txtpath)
end
for i = 1,#fea_img do
-- loop over individual images.
for k = 1,fea_img[i]:size(1) do
local best_match = 1
local best_score = -math.huge
for j = 1,#fea_txt do
local cur_score = torch.dot(fea_img[i][{k,{}}], fea_txt[j])
据我了解,fea_img是一个lua表格。那么 fea_img[i][{k,{}}] 这行代码是否表示在表格fea_img中查找键为'i'的值的切片?
我尝试搜索更多示例,并在此处找到此处使用的代码(最后一行):
for i = 1,nsamples,batchsize do
-- indices
local lasti = math.min(i+batchsize-1,nsamples)
local m = lasti - i + 1
-- k-means step, on minibatch
local batch = x[{ {i,lasti},{} }]
如有帮助,将不胜感激。谢谢!
点赞
用户1424244
从语法上讲,t[k] 使用一个键值索引一个表。通常情况下,如果表中存在键为 k 的记录,则返回其值。不多不少。
如果fea_img[i]是一个普通表,则 {k,{}} 将始终返回 nil,因为表索引是基于它们的标识解析的({k,{}} 总是一个新表)。根据你的代码,我必须得出的结论是 fea_img 的元素(即 extract_img 返回的结果)不是普通表。
在 Lua 中,可以使用元表重载索引操作。如果索引一个具有元表的值,并且在表中没有匹配的记录,则使用元表中的 __index:
local t = {}
setmetatable(t, {
__index = function(t, k)
return k
end
})
print(t[{}])
这个表有一个与之关联的元表,用于索引操作。在这种情况下,__index 返回键,但是你使用的任何库都可能提供更复杂的行为。
这是你使用的库特定的,与 Lua 语法无关的东西。
2018-09-15 15:01:12
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?

在Lua中,你可以以多种方式访问表中的特定索引。像这两个例子一样:
local myValue = someTable.theIndex -- 或者 local myOtherValue = someTable[2]所以,这里看到的结构是从一个(嵌套)表中访问一些值。
此外,在Lua中,可以使用除
nil之外的任何东西作为索引,因此甚至可以使用表。这行代码:
可以扩展为这个:
local index1 = i -- 这种情况下的i是你的循环变量 local index2 = { k , { } } -- 这将创建一个具有2个值的表,第一个值将是变量k的值,第二个值是一个空表 local value1 = fea_img[index1] -- 这将取得一个表 local value2 = value1[index2] -- 这将得到与fea_img[i][{k,{}}]相同的值更正和添加:
正如Nicol Bolas在评论中所说的那样:索引必须是精确匹配的。这意味着它必须确切地是相同的表,这在你提供的代码中并不是这样。你可能是省略了你认为不必要的代码,或者
fea_img具有某种元表。在这种情况下:
local k = 2 local table1 = {k, { } } local table2 = {k, { } }table2和table1具有完全相同的内容。但它们不是同一个表。这将导致如果一个用于在表中存储数据,另一个用于检索数据,则始终检索到nil。