如何在ATS中创建全局变量?

时间:2016-10-29 15:03:57

标签: ats

基本上,我正在寻找或多或少等同于以下C代码的东西:

int theGlobalCount = 0;

int
theGlobalCount_get() { return theGlobalCount; }

void
theGlobalCount_set(int n) { theGlobalCount = n; return; }

2 个答案:

答案 0 :(得分:4)

你可以使用一个巧妙的技巧:声明一个可变的全局变量,并使ref(也就是可变引用)指向它(不需要GC来完成这项工作!)。然后,实现函数以提供对可变引用的访问。

local

var theGlobalCount_var : int = 0
val theGlobalCount = ref_make_viewptr (view@ theGlobalCount_var | addr@ 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的范围之外,theGlobalCountlocal都不可见。

完整代码:glot.io

答案 1 :(得分:0)

您还可以使用extvar功能更新外部全局变量(以目标语言声明)。如果将ATS编译为不支持显式指针的语言(例如JavaScript),这将非常有用。这是一个使用此功能的运行示例:

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