変数宣言がローカルであると想定する言語には、一般的な問題があります。スコープを囲む変数をどのように取得しますか。
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
の値は変更されません。name
start
Lua、Javascript、Schemeなどの言語では、ローカルの明示的なマーキングがあるため、そのようにマーキングされていない変数はスコープスタックで見つけることができます。Pythonにはそのようなマーキングがないため、これは不可能です。Pythonでは、グローバル(トップレベル)変数を取得できます@toplevel
。Opaでもディレクティブを見つけました。しかし、私はスコープチェーンの中間点に興味があります。
もちろん、レコードを使用することによる回避策はありますが、直接的なルートはありますか?