如何在Rascal中定义泛型(多态)函数?

时间:2013-09-10 13:22:41

标签: rascal

我想定义一个通用函数来从地图中提取键,如下所示:

public list[K] keys(map[K,V] aMap) {
    return [ key | key:val <- aMap ];
}

虽然没有给出语法错误,但这不起作用。有办法吗?

1 个答案:

答案 0 :(得分:2)

您可以将其定义为

public list[&K] keys(map[&K,&V] aMap) {
    return [ k | k <- aMap ];
}

请注意,键是无序的,因此将它们作为一组而不是列表返回可能更有意义。您也可以使用

将关键字或值直接从地图中投影出来,直接获取关键字或值
aMap<0>

用于键组或

aMap<1>

表示值集。最后,Set模块包含一个toList函数,因此您可以在一行中执行此操作

toList(aMap<0>)

会给你与调用键功能相同的结果。