[LuaLanes][1] 内で実行されている関数が upvalue の設定を無視しているように見えるこのコードがあるので、これが正常な動作であるかどうかを知りたいのですが、間違って使用しているかどうかを知りたいです。
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: また、おそらく関連しているのですが、レーン内を走るとコモンが変化するのはなぜですか? 新しいレーンの Lua ステートに完全にコピーされますか?
[1]: https://github.com/LuaLanes/lanes