执行时 Lua 中的加载函数出现问题

Problem with Load function in Lua while execution

print("i", "j", "i & j")
for i = 0,1 do
   for j=0,1 do
   print(i, j, i & j)
   end
end

以上代码在 Lua 中运行良好。它给出以下输出。

i   j   i & j
0   0   0
0   1   0
1   0   0
1   1   1

但是下面的代码不起作用。基本上我想根据一些用户输入生成 Truth Table。加载功能似乎有问题。可能它与函数加载处理的变量类型有关。谁能建议?我们可以写 Lua 函数来实现吗?这是不起作用的代码。

str="i & j"
print("i", "j", "i & j")
for i = 0,1 do
    for j=0,1 do
        print(i,j,load(str))
    end
end

使用小技巧:

local str="i * j" -- or i & j for v5.3 lua
print("i", "j", str)
for i = 0,1 do
    for j=0,1 do
       local  s = str:gsub("i",i):gsub("j",j)
       print(i,j, (loadstring or load)("return "..s)() )
    end
end

这是一个尝试,最多可以使用近 60 个值:

-- Lua >= 5.3
local concat = table.concat

local str    = "((i | j) ~ k) & l" -- io.read() ?
local sep    = " "

local values = {} -- 0 or 1
-- i, j, k, etc.
local names  = setmetatable({},
  {__index = function(t,k)
    t[k] = 0
    values[#values+1] = k
    return 0
  end}
)

local aux = {} -- Values to be printed
load("return " .. str,nil,"t",names)()  -- Initialization
local n = #values
print(concat(values,sep) .. sep .. str) -- Variables
for i = 0,(1<<n)-1 do -- 2^n evaluations
  local k = i
  for j = n,1,-1 do
    names[values[j]] = k % 2
    aux[j] = k % 2
    k = k >> 1
  end
  print(concat(aux,sep) .. sep .. load("return " .. str,nil,"t",names)())
end
i j k l ((i | j) ~ k) & l
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 1
0 1 0 0 0
0 1 0 1 1
0 1 1 0 0
0 1 1 1 0
1 0 0 0 0
1 0 0 1 1
1 0 1 0 0
1 0 1 1 0
1 1 0 0 0
1 1 0 1 1
1 1 1 0 0
1 1 1 1 0