【发布时间】:2017-02-09 09:24:37
【问题描述】:
这里是 F# 初学者。
我正在尝试将一个元组与多个案例进行匹配,并在匹配条件下返回一个特定值。看起来是这样的:
match inf, sup with
| nan , _
| _ , nan
-> Interval(nan,nan)
| _ , _ when inf = -infinity && sup = -infinity -> Interval(nan,nan)
| _ , _ when inf = infinity && sup = infinity -> Interval(nan,nan)
| _ , _ when inf > sup -> Interval(nan,nan)
| _ , _ -> Interval(inf,sup)
由于几乎每个案例都返回 Interval(nan,nan),我想将它们分组,因为可读性好,但我不知道如何。我尝试了以下
match inf, sup with
| nan , _
| _ , nan
| _ , _ when inf = -infinity && sup = -infinity
| _ , _ when inf = infinity && sup = infinity
| _ , _ when inf > sup -> Interval(nan,nan)
-> Interval(nan,nan)
| _ , _ -> Interval(inf,sup)
但是编译器说
这种“或”模式的两侧绑定不同的变量集
所以我尝试了以下方法:
match inf, sup with
| nan , _
| _ , nan
-> Interval(nan,nan)
| _ , _ when inf = -infinity && sup = -infinity
| _ , _ when inf = infinity && sup = infinity
| _ , _ when inf > sup -> Interval(nan,nan)
-> Interval(nan,nan)
| _ , _ -> Interval(inf,sup)
这里我在第二个得到一个错误 |从第二个 when 子句开始。他需要一个“->”或其他标记。
那么:我怎样才能缩短这个匹配或怎样改进它?这几个 Interval(nan,nan) 对我来说似乎并不重要。
提前致谢!
【问题讨论】:
-
我怀疑
| nan , _ | _ , nan的行为是你所希望的......
标签: f# pattern-matching