在Rascal中,如何为复合类型引入一个名称(由内置基本类型和类型构造函数构建,如list和map)? 例如。我想做像
这样的事情typedef IntList = list[int];
typedef StrToIntList = map[str,IntList];
StrToIntList mymap = ();
答案 0 :(得分:2)
您可以使用typedef
代替alias
。例如:
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];
请注意,alias
引入了类型等价而不仅仅是子类型。因此,对于任何接受别名作为参数类型的函数,您还可以提供其别名或其任何子类型的类型的值。