2

假设变量声明是本地的,语言中存在一个常见问题。您如何获得封闭范围内的变量。

欧巴有办法吗?

例如:

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我们得到一个in 未使用的警告,并且inset_name的值永远不会改变。namestart

在 Lua、Javascript 或 Scheme 等语言中,有明确的局部变量标记,因此可以在范围堆栈中找到未以这种方式标记的变量。在 Python 中没有这样的标记,所以这是不可能的。在 Python 中,您可以获取全局(顶级)变量,我@toplevel也在 Opa 中找到了该指令。但我对范围链中的中间点感兴趣。

当然,有一些解决方法,通过使用记录,但有直接的途径吗?

4

2 回答 2

3

一种解决方案是使用参考模块:

Reference.create、Reference.get、Reference.set

http://opalang.org/resources/doc/index.html#stdlib.core.reference.opa.html/!/value_stdlib.core.Reference

于 2011-08-25T22:24:13.077 回答
1

Fred 的回答中提到的参考模块确实是解决这个问题的一种方法,它最接近您的要求。

但也很高兴知道,当以“正确的方式”编程时,Opa 程序中的大部分状态都将在Sessions中捕获,会话状态的更改由发送给它的消息触发。

于 2011-08-26T06:41:10.937 回答