如何在Rascal MPL中动态获取变量的属性或字段?
在Rascal中获取变量属性/字段的方法
你要找的类似JavaScript Object.keys 或 Python vars 的功能,在Rascal里可以通过以下几个内置函数实现:
fields函数:返回一个值的所有字段名称(字符串列表),适用于记录(record)、代数数据类型的构造子实例等。
示例:data Person = person(str name, int age); Person p = person("Alice", 30); println(fields(p)); // 输出: ["name", "age"]values函数:和fields搭配使用,返回对应字段的值列表,要同时拿到字段名和值可以用zip(fields(val), values(val))。
示例:println(zip(fields(p), values(p))); // 输出: [("name", "Alice"), ("age", 30)]typeOf结合字段遍历:如果需要从类型层面查看字段(而非实例),可以对typeOf返回的类型值使用fields:println(fields(typeOf(p))); // 同样输出: ["name", "age"]
另外,对于映射(map)类型,直接用keys函数就能获取所有键,效果类似Object.keys处理对象:
map[str, int] scores = {"math": 90, "english": 85}; println(keys(scores)); // 输出: ["math", "english"]
需要注意的是,这些函数主要针对Rascal的记录、代数数据类型实例、映射等结构化数据,对int、str这类基本类型调用fields会返回空列表,因为它们没有字段属性。
内容的提问来源于stack exchange,提问作者Teun M.
相关产品推荐
相关产品推荐

