Rascal中的数据结构

时间:2015-03-30 15:16:41

标签: rascal

我正在寻找可以模仿Object或struct的数据结构。真的,只是一些传递不同类型变量的紧凑方式。目前我正在使用一个元组,但引用元组的各个部分并不像我想的那么令人愉快。目前我刚刚创建了代表元组中各个位置的别名:

alias AuxClass = tuple[str,str,list[int],list[int],Dec];
int ACLS = 0;

但是我不得不重组这个元组,因此不得不改变索引。我可以在这里使用一些我错过的东西,或者将来会出现一个特色吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

请查看代数数据类型功能:

http://tutor.rascal-mpl.org/Rascal/Rascal.html#/Rascal/Declarations/AlgebraicDataType/AlgebraicDataType.html

您可以创建一个构造函数来表示您尝试在上面定义的数据类型,类似于您对结构执行的操作,并为构造函数中的每个元素指定一个字段名称:

data AuxClass = auxClass(str f1, str f2, list[int] f3, list[int] f4, Dec f5)

然后,您可以使用构造函数名称并提供数据来创建此实例:

a = auxClass("Hello", "World", [1,2,3], [4,5,6], D1)(其中D1Dec)。

获得实例后,您可以使用字段名称访问信息:

a.f1 // which equals "Hello"

a.f3 // which equals [1,2,3]

size(a.f3) //当前等于3

您可以使用字段名称更新信息:

a.f2 = "Rascal"

a.f4 = a.f4 + 7 // f4 is now [4,5,6,7]

代数数据类型实际上非常灵活,因此除此之外你还可以做很多事情。请随意查看文档并在此处提出问题。