rascal - 如何在 Rascal 中定义通用(多态)函数?

标签 rascal

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

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

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

最佳答案

您可以将其定义为

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

请注意,键是无序的,因此将它们作为集合而不是列表返回可能更有意义。您还可以使用以下任一方法将键或值直接投影到 map 之外,从而将它们作为集合直接获取:

aMap<0>

按键组或

aMap<1>

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

toList(aMap<0>)

这将为您提供与调用keys函数相同的结果。

关于rascal - 如何在 Rascal 中定义通用(多态)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720152/

相关文章:

memory - 取消注册 M3 型号

lexical-analysis - 在 Rascal 中处理复杂的词汇

java - 约束解决推断类型以重构 Java 代码

rascal - 为什么 Rascal 中的 [1..5] 返回 [1,2,3,4]?

java - 在 Java 包上使用 "ls"命令时出现不支持的方案错误

rascal - @doc 注释和从 Rascal 模块生成文档的目的

rascal - 如何避免Rascal中模块之间的名称冲突?

rascal - 了解 Rascal 对 Java 的支持

java - 如何从文件创建 Rascal AST