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

これは機能しません。nameで使用されていない警告が表示され、 inset_nameの値は変更されません。namestart

Lua、Javascript、Schemeなどの言語では、ローカルの明示的なマーキングがあるため、そのようにマーキングされていない変数はスコープスタックで見つけることができます。Pythonにはそのようなマーキングがないため、これは不可能です。Pythonでは、グローバル(トップレベル)変数を取得できます@toplevel。Opaでもディレクティブを見つけました。しかし、私はスコープチェーンの中間点に興味があります。

もちろん、レコードを使用することによる回避策はありますが、直接的なルートはありますか?

4

2 に答える 2

3

1つの解決策は、参照モジュールを使用することです。

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

フレッドの回答で言及されているリファレンスモジュールは、確かにこれに対する1つの解決策であり、あなたが求めているものに最も近いものです。

ただし、「正しい方法」でプログラミングする場合、Opaプログラムのほとんどの状態がセッションでキャプチャされ、メッセージの送信によってセッションの状態が変更されることも知っておくとよいでしょう。

于 2011-08-26T06:41:10.937 に答える