我想知道是否可以在此处使用匿名变量来匹配节点的类型。例如来自http://tutor.rascal-mpl.org/Rascal/Expressions/Values/Location/Location.html#/Rascal/Patterns/Abstract/TypedLabelled/TypedLabelled.html):
case Exp e:_(_,_): println("And I found an Exp <e>");
将匹配添加和减去Exp节点。我已经尝试过这样的事情,但没有取得任何成功。
(道歉,在我看到ask.rascal的链接之前,我在网站的评论部分发布了这个)
答案 0 :(得分:3)
基于戴维的答案,如果您只想匹配带有两个参数的构造函数,您可以执行类似的操作:
rascal>data D = d1(int n) | d2(int n, int m) | d3(int n,int m);
ok
rascal>D d: str s(_,_) := d2(3,4);
bool: true
rascal>D d: str s(_,_) := d1(3);
bool: false
通常在此表单的匹配项中,您将使用构造函数名称。使用str s
强制将其作为通用节点匹配,其中节点作为节点名称(字符串,此处为构造函数名称)和节点参数(此处,我们假设两个参数)给出。如果存在大量这些类型的匹配,这可能很有用,但我建议您单独编写它们。
答案 1 :(得分:1)
case Exp e: println(e);
应该这样做