最小的例子实际上是Rings main page
的第二个例子require"rings"
local init_cmd = [[
require"stable"]]
local count_cmd = [[
count = stable.get"shared_counter" or 0
stable.set ("shared_counter", count + 1)
return count
]]
S = rings.new () -- new state
assert(S:dostring (init_cmd))
print (S:dostring (count_cmd)) -- true, 0
print (S:dostring (count_cmd)) -- true, 1
S:close ()
S = rings.new () -- another new state
assert (S:dostring (init_cmd))
print (S:dostring (count_cmd)) -- true, 2
S:close ()
但是,我无法获得shared_counter
的价值。 print(shared_counter)
输出nil
。
我尝试使用stable.get()
,但它说stable
只能在奴隶状态下使用。
我终于尝试了
remotedostring("shared_counter = "..count)
哪个有效,但我不太确定这是否是一种正确的方法。我想直接访问stable
值表是否足够?
编辑:哦,我忘了补充一点,问题的主要部分是以另一种方式进行通信 - 从主人到奴隶。
答案 0 :(得分:2)
stable
库将值存储在名为_state_persistent_table_
的主状态的全局表中。虽然这显然是隐藏和私密的。
如果您对此感到不舒服,stable
只是在内部使用remotedostring()
,那么您自己也不会做这样的事情。
对于master-> slave,slave:dostring()
应该足够,使用类似的技术。