在Lua执行过程中使用Load函数出现问题

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

然而,下面的代码不起作用。 基本上,我想要基于某些用户输入生成真值表。 Load函数似乎存在问题。 可能与函数load处理的变量类型有关。 有人能建议吗? 我们可以编写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

原文链接 https://stackoverflow.com/questions/71363076

点赞
stackoverflow用户7504558
stackoverflow用户7504558

使用小技巧:

local str="i * j" -- 或 v5.3 lua 中的 i & j
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
2022-03-05 15:28:20
stackoverflow用户14072292
stackoverflow用户14072292

下面是一个尝试,可以最多使用近六十个值:

-- 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
2022-03-05 16:58:00