1

问题如下:

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
4

1 回答 1

1

你有(至少)三个选项。

首先,您可以将其包含在案例中:

case Expr ee:binaryOperation(Expr e1:scalar(_), Expr e2, Op opern) :

在这种情况下,您将需要第二种更一般的情况来说明 when e1is not a scalar

case Expr ee:binaryOperation(Expr e1, Expr e2, Op opern) :

这应该低于第一种情况。我不是订购依赖项的忠实粉丝,所以这不是我会使用的解决方案。

其次,您可以在条件中匹配它。当它是 a 时,这匹配scalar

if(scalar(_) := e1)

当它不是时,这匹配:

if(scalar(_) !:= e1)

如果你需要内容——里面的值scalar——你会想在里面放一个变量来在匹配中绑定它。

第三,您可以使用is运算符:

if(e1 is scalar)

或者

if (!(e1 is scalar))

会让您检查是否e1使用scalar. 运算符真的说“ is的is顶级构造函数”,如果这就是你需要知道的,那比编写匹配更简单。e1scalar

于 2014-11-06T20:44:52.453 回答