2011-08-25 133 views
2

假定变量声明是局部的语言中存在一个常见问题。你如何在封闭范围中获得变量。在封闭范围内修改变量

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

这是行不通的。我们得到nameset_name未使用的警告,并且start中的name的值永远不会更改。

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

有解决方法,当然,通过使用记录,但是有直接路由吗?

回答

1

参考模块的确是一个解决方案,这和它的最接近你所要求的。

但是,知道在编程“正确方式”时,Opa程序中的大部分状态将在Sessions中捕获,同时通过向其发送消息触发会话状态的更改。

+0

谢谢。学习新语言的一部分技巧是学习成语和文化。我现在是进入Opa的一天,虽然这很直观,但我确信我错过了一种真正的解决方案。我已经接受了弗雷德的回答,但我一定会读到会议。 – Ian

+0

顺便说一下,您的链接对我来说不起作用,但是这样做了:http://opalang.org/resources/doc/index.html#session.opa.html/!/value_stdlib.core.rpc.c.Session – Ian

+0

顺便说一句。您可以在我最近的博客文章中阅读有关会议的更多信息:http://blog.opalang.org/2011/09/sessions-handling-state-communication.html – akoprowski