1

最小的例子实际上是Rings 主页的第二个例子

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值表就足够了?

编辑:哦,我忘了补充,问题的主要部分是以另一种方式进行通信 - 从主机到从机。

4

1 回答 1

2

stable库将值存储在名为 的主状态的全局表中_state_persistent_table_。尽管显然这意味着隐藏和私密。

如果你对此感到不舒服,stable就在remotedostring()内部使用,自己做这样的事情并不难。

对于 master->slave slave:dostring(),使用类似的技术就足够了。

于 2012-05-19T12:07:51.540 回答