成对打印一张桌子

lua*_*eak 1 lua lua-table

我试图in pairs在函数内部使用但它不起作用,它只打印第一行(键).这是我的代码:

set = {1,2,3,4};
unset = {5,6,7,8};

    function listen(ftype)
        if (ftype == [[~]]) then
            for num,str in pairs(set) do
                return str;
            end
        end
        if (ftype == [[$]]) then
            for num,str in pairs(unset) do
                return str;
            end
        end
    end

    print(listen([[~]])..[[ =:= ]]..listen([[$]]));
Run Code Online (Sandbox Code Playgroud)

如果我做这样的事情..

for num,str in pairs(unset) do
    print(str);
end
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力.这正是我想要的,但在功能中.

Yu *_*Hao 7

您可以构建自己的迭代器:

function double_pair(t1, t2)
    local i = 0
    return function() i = i + 1
               return t1[i] and t1[i] .. " =:= " .. t2[i] 
           end
end
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

for str in double_pair(set, unset) do
    print(str)
end
Run Code Online (Sandbox Code Playgroud)

输出:

1 =:= 5
2 =:= 6
3 =:= 7
4 =:= 8
Run Code Online (Sandbox Code Playgroud)

请注意,您不需要使用分号来结束语句,除非语句在一行中并且您希望将它们清除.并且[[ =:= ]]通常用于构建长多行字符串,通常我们选择使用双引号" =:= "或单引号' =:= '.