2016-10-29 2 views

ответ

4

Вы можете использовать ловкий трюк: объявить изменяемый глобальную переменную, и сделать ref (он же изменчивый ссылка) указывают на это (GC не требуется для выполнения этой работы!). Затем реализуйте функции для обеспечения доступа к изменяемой ссылке.

local 

var theGlobalCount_var : int = 0 
val theGlobalCount = ref_make_viewptr ([email protected] theGlobalCount_var | [email protected] theGlobalCount_var) 

in // in of [local] 

fun 
theGlobalCount_get() : int = ref_get_elt (theGlobalCount) 

fun 
theGlobalCount_set (n: int): void = ref_set_elt (theGlobalCount, n) 

end // end of [local] 

Обратите внимание, что заявления внутри local - in видны только код внутри in - end. Поэтому ни theGlobalCount_var, ни theGlobalCount не видны за пределами local.

Полный код: glot.io

0

Вы также можете использовать функцию extvar обновить внешнюю глобальную переменную (объявленный в целевом языке). Это очень полезно, если вы скомпилируете ATS на язык, который не поддерживает явные указатели (например, JavaScript). Ниже приведен пример использования, который использует эту функцию:

http://www.ats-lang.org/SERVER/MYCODE/Patsoptaas_serve.php?mycode_url=http://pastebin.com/raw/MsXhVE0A