Странное поведение LuaLanes с повышенными значениями

У меня есть этот код, в котором функция, выполняемая внутри [LuaLanes][1], кажется, игнорирует установку повышающего значения, поэтому я хочу знать, является ли это нормальным поведением, и я использую его неправильно или нет.

local lanes = require("lanes"):configure()

--A getter/setter module with an upvalue (inlined)
local Common = {}

local internal_variable = {test = 1}

function Common.get_variable()
  print("Using "..tostring(Common).." - Getting var ("..tostring(internal_variable)..") test is "..internal_variable.test)
  return internal_variable
end

function Common.set_variable(new_var)
  print("Using "..tostring(Common).." - Setting var ("..tostring(new_var)..") test is "..new_var.test)
  internal_variable = new_var
  print("Using "..tostring(Common).." - Set     var ("..tostring(internal_variable)..") test is "..internal_variable.test)
end

print("Common ("..tostring(Common)..") initialized")

local function main()
  print("Entering main... Common is "..tostring(Common))
  local var = Common.get_variable()
  print("Inside main var is "..tostring(var))
  local new_var = {test = 2}
  Common.set_variable(new_var)
  local verify_var = Common.get_variable()
  print("Inside main new var is "..tostring(verify_var))
  assert(new_var == verify_var)
end

print("Starting program... Common is "..tostring(Common))

local result
--result = main()
result = lanes.gen("*",main)()[1]

При запуске с помощью Lanes утверждение не выполняется, но выполняется нормально (как и ожидалось), работает просто main(),

Вывод с использованием main():

Common (table: 00000000006E9DD0) initialized
Starting program... Common is table: 00000000006E9DD0
Entering main... Common is table: 00000000006E9DD0
Using table: 00000000006E9DD0 - Getting var (table: 00000000006E9E20) test is 1
Inside main var is table: 00000000006E9E20
Using table: 00000000006E9DD0 - Setting var (table: 00000000006EA140) test is 2
Using table: 00000000006E9DD0 - Set     var (table: 00000000006EA140) test is 2
Using table: 00000000006E9DD0 - Getting var (table: 00000000006EA140) test is 2
Inside main new var is table: 00000000006EA140

Вывод с использованием lanes.gen("*",main)()[1]

Common (table: 0000000000719480) initialized
Starting program... Common is table: 0000000000719480
Entering main... Common is table: 0000000000740800
Using table: 0000000000740800 - Getting var (table: 00000000007408A0) test is 1
Inside main var is table: 00000000007408A0
Using table: 0000000000740800 - Setting var (table: 0000000000740A80) test is 2
Using table: 0000000000740800 - Set     var (table: 0000000000740A80) test is 2
Using table: 0000000000740800 - Getting var (table: 00000000007408A0) test is 1
Inside main new var is table: 00000000007408A0
F:\dev\Env\Lua\lua51-lua-5.1.4-x64\bin\lua.exe: ...\LanesBehaviourTest\LanesBehaviour\src\main\main.lua:29: assertion failed!
stack traceback:
    [C]: ?
    [C]: ?
    ...\LanesBehaviourTest\LanesBehaviour\src\main\main.lua:36: in main chunk
    [C]: ?

Почему это так get_variable() возвращает ту же таблицу даже после установки другой? Есть идеи?

PS: Также, вероятно, связано, почему Common меняется при запуске внутри дорожек? Это полностью копируется в новое состояние Lua Lane?

  [1]: https://github.com/LuaLanes/lanes

0 ответов

Другие вопросы по тегам