2011-08-25 86 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