Существует распространенная проблема в языках, которые предполагают, что объявления переменных являются локальными. Как вы получаете переменные во вложенных областях.
Есть ли способ в Опа?
Например:
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
не используется в set_name
, а значение name
в start
никогда не изменяется.
В таких языках, как Lua, Javascript или Scheme, существует явная маркировка локальных элементов, поэтому переменные, не помеченные таким образом, можно найти в стеке областей действия. В Python нет такой маркировки, и поэтому это было бы невозможно. В Python вы можете получить глобальные (toplevel) переменные, и я нашел директиву @toplevel
в Opa. Но меня интересуют промежуточные пункты в цепочке прицелов.
Конечно, есть обходные пути с использованием записей, но есть ли прямой маршрут?