scope - 修改封闭范围内的变量

标签 scope opa

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

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}")

这行不通。我们收到一条警告,指出 set_name 中未使用 name,并且 startname 的值从未更改。

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

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

最佳答案

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

Reference.create、Reference.get、Reference.set

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

关于scope - 修改封闭范围内的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197578/

相关文章:

perl - 全局变量在子程序中重置自身

groovy - 为了让 groovy 闭包修改委托(delegate)范围内定义的变量,您是否需要显式指定 delegate.theVariableName?

database - 奥帕 : passing database as function parameters

ocaml - opa 扩展可以用 Ocaml 编写吗?

opa - 将用户定义的类型添加到数组

c++ - 在 main() 中全局声明的函数不在 qt widget slot 的范围内

xslt - 如何从嵌套循环内的外部循环访问元素?

python - 如何在多个 Python 模块中更改变量?

opa - 不同的 OPA 应用程序可以共享数据库吗?

opa - 如何在 Opa 中访问 HTML Canvas 元素?