在 Rascal 中,如何引入复合类型的名称(由内置基本类型和类型构造函数(如列表和映射)构造而成)? 例如。我想做类似的事情
typedef IntList = list[int];
typedef StrToIntList = map[str,IntList];
StrToIntList mymap = ();
最佳答案
您可以使用alias
来代替typedef
。例如:
rascal>alias IntList = list[int];
ok
rascal>alias StrToIntList = map[str,IntList];
ok
rascal>StrToIntList mymap = ();
StrToIntList: ()
您也可以使用alias
为现有基本类型提供备用名称,因此您也可以执行以下操作:
alias ID = int;
并且,如果需要,您可以包含类型参数,因此任意类型的图形可以定义为:
alias Graph[&T] = rel[&T,&T];
请注意,别名
引入了等效类型,而不仅仅是子类型。因此,对于任何接受别名作为参数类型的函数,您还可以提供它别名的类型或其任何子类型的值。
关于typedef - 在 Rascal 中为复合类型命名(a la typedef),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39615798/