Странное поведение 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