我想也许match .. with
可能像序列表达式中的if
一样工作:
let foo (m: 'a option) =
[ yield 'a'
match m with
| Some _ -> yield 'b'
yield 'c' ]
也就是说,我只需要指定匹配的case,而fail case被视为no-op。不幸的是情况并非如此,不匹配会引发异常。
我发现如果我像这样使用yield!
,我仍然可以获得所需的结果:
let bar (m: 'a option) =
[ yield 'a'
match m with
| Some _ -> yield 'b'
| _ -> yield! []
yield 'c' ]
这有效,但这是最好的方法吗?只是想知道是否有更多的标准方法可以做到这一点。
答案 0 :(得分:2)
Funk的回答是正确的,但你也可以用简单的{ "id": "00053", "cssLevel": "53", "username": "user53", "Title": "title53"}
{ "id": "00054", "cssLevel": "54", "username": "user54", "Title": "title54"}
and then
<div class="{{cssLevel}}">{{model.username}}</div>
or
<div v-bind:class="cssLevel">{{model.username}}</div>
替换yield! []
:
()
计算表达式中的规则是任何计算为let bar (m: 'a option) =
[ yield 'a'
match m with
| Some _ -> yield 'b'
| _ -> ()
yield 'c' ]
类型的表达式(即unit
值)将被该表达式替换为&#34; s&#34;零&# 34;价值(无论什么&#34;零&#34;意味着什么类型的东西)。对于列表,&#34;零&#34; value是空列表。当你有一个没有()
子句的if
语句时,这也是 幕后发生的事情:else
子句隐含else
。所以Funk的答案相当于else ()
,它在列表表达式中相当于if Option.isSome m then yield 'b' else ()
。
希望这个解释清楚,而不是让你进一步混淆;计算表达式在他们&#34;点击&#34;之前总是需要一些大脑弯曲。你明白了如果您需要更多解释,请告诉我。