我如何做相当于在 Lua 中按值传递参数?

有效值

我是 Lua 的新手,我只是尝试做一些在其他语言中常见且简单的事情,但由于函数的参数是通过引用传递的(我假设),因此在 Lua 中的工作方式不同。似乎也通过引用将内容添加到表中。伪代码:

objImage --stores details about each image like name, iso, aperture etc.
tblMetadata --table that has all the image names and associated data.
tblImages --table to hold the image objects (objImage)

for each line in tblMetadata
  objImage.name = blahblah
  objImage.iso = blahblah
  etc...
  table.insert(tblImages, objImage)
  objImage = nil 
end

在我使用过的大多数语言中,objImage = nil(或等效语言)重置对象以允许将新图像添加到表格中。但是在 Lua 中,它将刚刚添加到表中的对象设置为 nil。以这样的迭代方式将一系列“对象”添加到表格中的技术是什么?我尝试使用第二个 objImage (objImage2) 并在将它 (objImage2) 添加到表之前为其分配 objImage,但这只是为原始 objImage 分配了一个指针/引用。

编辑:我的伪代码没有完全反映我想要做的事情,所以我在下面添加了实际代码:

function extractExif(tblOutput)
    local tblImages = {}
    local blnFlag = false
    local intCount = 0
    local Image = {}  --pseudo object to hold metadata for each image

    for k,v in pairs(tblOutput) do  --iterate through each value in the table
        if string.find(v, "^=.+") then
            --test if new image other than the first one
            if blnFlag == true then
            --add Image to tblImages and then clear Image object
            table.insert(tblImages, Image)
            Image = nil
            blnFlag = false
            end

            i, j = string.find(v, "/")  -- **** MAC ONLY. Back slash for Windows *****
            Image.filePath = string.sub(v, i)   --returns the file path
            --Image.name = string.match(v, "([^/]+)$")  --return the file name
            blnFlag = true

        elseif string.find(v, "ISO") ~= nil then
            Image.iso = string.match(v, "%a+:(.+)") --get text (i.e value) to right of colon
        elseif string.find(v, "Film") ~= nil then
            Image.filmSim = string.match(v, "%a+:(.+)")
        elseif string.find(v, "Setting") ~= nil then
            Image.drMode = string.match(v, "%a+:(.+)")
        elseif (string.find(v, "Auto") ~= nil) or (string.find(v, "Development") ~= nil) then  -- corresponds to "Auto Dynamic Range" and "Development Dynamic Range" in fuji exif
            Image.dr = string.match(v, "%a+:(.+)")
        else

        end
    end
end

我当然可以通过使用嵌套表等来更好地编程,而不是使用平面 tblOutput 元数据列表,而且我可能会在某个时候这样做。

普基什捷林斯基

可能您必须objImage使用空表而不是nil来重置

例如:

local objImage = {}
local tblMetadata = {'foo', 'bar', 'biz'}
local tblImages = {}

for k, v in ipairs(tblMetadata) do
  objImage.name = v
  objImage.iso = v
  table.insert(tblImages, objImage)
  objImage = {}
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Amazon EC2中,我该如何做相当于Google App Engine的helloworld.py?

来自分类Dev

在Amazon EC2中,我该如何做相当于Google App Engine的helloworld.py?

来自分类Dev

lua相当于python repr

来自分类Dev

相当于Lua的pairs()for Python

来自分类Dev

相当于Lua的C ++ setw吗?

来自分类Dev

函数如何修改C ++中按值传递的参数?

来自分类Dev

函数如何修改C ++中按值传递的参数?

来自分类Dev

Lua Torch相当于np.where()?

来自分类Dev

C-相当于Lua的math.rad

来自分类Dev

在C#中,我应该按值传递参数并返回相同的变量,还是按引用传递?

来自分类Dev

“===”相当于在Java中

来自分类Dev

在Lua中,如何从作为参数传递给函数的函数中获取函数的参数?

来自分类Dev

相当于Bash $ @的TCL / Expect或如何在TCL / Expect中将参数传递给生成的进程

来自分类Dev

如何或可以将带有参数作为参数的函数传递给lua中的函数?

来自分类Dev

在Lua中将值作为参数传递

来自分类Dev

相当于Gensim函数/参数的SciSpacy

来自分类Dev

如何只检查值中的数字-Lua

来自分类Dev

在zsh中相当于checkwinsize?

来自分类Dev

相当于iOS中的Android TextView?

来自分类Dev

相当于Android中的UIView

来自分类Dev

相当于Android中的plist

来自分类Dev

在Julia中相当于Python的“ with”吗?

来自分类常见问题

相当于JavaScript中的Python Pandas

来自分类Dev

相当于iscolor中的sass

来自分类Dev

相当于javaFX中的JLayeredPane?

来自分类Dev

相当于iOS中的Fragment(Android)

来自分类Dev

相当于iOS中的NSURLProtocol的Android

来自分类Dev

在mongo中相当于$ push的地图

来自分类Dev

在Ubuntu中相当于BasicTeX?

Related 相关文章

热门标签

归档