这与" the pattern is expected to be formed with a constructor (of datavtype)
"失败,因为它匹配线性构造函数的特殊free()ing语法,而不是负号。
#include "share/atspre_staload.hats"
implement main0() =
case ~1 of
| ~1 => println!("ok")
| _ => ()
这与" operator fixity cannot be resolved
"失败。添加parens或创建二元运算符并没有帮助。
#include "share/atspre_staload.hats"
implement main0() =
case ~1 of
| -1 => println!("ok")
| _ => ()
这失败了,因为case
中的变量引入了一个新绑定,与绑定范围内的绑定无关:
#include "share/atspre_staload.hats"
implement main0() =
let
val negative_one = ~1
in
case ~2 of
| negative_one => println!("unintend match")
| _ => () // error: this pattern match clause is redundant
end
这是我们最接近的吗?它的性能有多少呢?
#include "share/atspre_staload.hats"
implement main0() =
let
val negative_one = ~1
in
ifcase
| negative_one = ~1 => println!("this works")
| _ => ()
end
答案 0 :(得分:1)
在ATS中,〜1不被视为常数;它是一个函数应用程序:〜应用于1.您可以按如下方式定义否定1:
#define NEG1 %(~1) // not yet working // to be fixed
或
#define NEG1 %(0-1) // this one is currently working
然后你可以写:
case ~1 of
| 1 => ...
| NEG1 => ...
使用'ifcase'(而不是'case')应该同样有效。