语言中存在一个常见问题,即假设变量声明是本地的。你如何得到封闭范围内的变量。
Opa有办法吗?
例如:
start() =
name = Random.string(5)
set_name(new_name) =
old_name = name
name = new_name
log("User {old_name} changed name to {new_name}")
这不起作用。我们收到警告name
set_name
未使用name
,start
中@toplevel
的值永远不会更改。
在像Lua,Javascript或Scheme这样的语言中,有明确的局部标记,因此可以在范围堆栈中找到未以这种方式标记的变量。在Python中没有这样的标记,所以这是不可能的。在Python中你可以得到全局(顶层)变量,我也在Opa中找到了{{1}}指令。但我对范围链中的中间点感兴趣。
当然,有一些解决方法,通过使用记录,但是有直接途径吗?
答案 0 :(得分:3)
一种解决方案是使用参考模块:
Reference.create,Reference.get,Reference.set
答案 1 :(得分:1)
弗雷德的答案中提到的参考模块确实是一个解决方案,它最接近你所要求的。
但是,知道在编写“正确的方式”时,也可以在Sessions中捕获Opa程序中的大多数状态,并通过发送给它的消息触发会话状态的更改。