问题如下:
data Scalar=type1()|type2()|...
data Expr=scalar(Scalar aType)| secondForm(..) | thirdForm(..) |..
case Expr ee:binaryOperation(Expr e1,Expr e2, Op opern):
//do something useful
如何指定确定e1和e2类型的条件,并采取以下措施,例如,
if(e1 != scalar(_)) //do something useful
if(e2 != scalar(_)) //do something useful
答案 0 :(得分:1)
你有(至少)三种选择。
首先,您可以在案例中包括:
case Expr ee:binaryOperation(Expr e1:scalar(_), Expr e2, Op opern) :
在这种情况下,当e1
不是scalar
时,您需要第二个更一般的案例:
case Expr ee:binaryOperation(Expr e1, Expr e2, Op opern) :
这应该低于第一种情况。我不是订购依赖项的忠实粉丝,所以这不是我会使用的解决方案。
其次,您可以在条件中匹配此项。这与scalar
:
if(scalar(_) := e1)
并且当它不匹配时匹配:
if(scalar(_) !:= e1)
如果您需要内容 - scalar
内的值 - 您可能希望在其中放置一个变量以在匹配中绑定它。
第三,您可以使用is
运算符:
if(e1 is scalar)
或
if (!(e1 is scalar))
可以让您检查e1
是否使用scalar
构建。 is
运算符确实说“e1
的顶层构造函数是scalar
”,如果这是您需要知道的全部内容,那么这比编写匹配项更简单。