f#多行三元表达式

时间:2011-11-14 02:05:49

标签: f#

let a = [
    1;
    2;
    3;
    if 3 > 2 then
        4;
    else
        5;
    6
]

哪个失败了“这个构造被剥夺了...... ......请保留这个表达式以表明它是列表中的一个元素......”,我这样做,

let a = [
    1;
    2;
    3;
    (if 3 > 2 then
        4
    else
        5);
    6
]

导致编译器告诉我“不匹配”('“。显然编译器不喜欢带有paranthesized的多行条件。为什么会这样?并且它有什么办法吗?

这是一个微不足道的案例,但在实际使用中我会有任意复杂的递归表达式(因此需要将它分割成多行),我不想破坏表达式并通过list-append进行不完美的处理什么不是。

编辑: 这有效:

let a = [
    1;
    2;
    3;
    if 3 > 2 then yield(
        4
    )else yield(
        5);
    6
]

但是比我想要的更加冗长(5个关键字和4个括号用于简单的三元运算!)。寻找更清洁的东西继续

2 个答案:

答案 0 :(得分:7)

添加else

后,您只需将if缩进(左侧。
let a = [
    1;
    2;
    3;
    (if 3 > 2 then
        4
     else //same column as matching if
        5);
6
]

答案 1 :(得分:2)

不需要分号时的多行。

let a = [
    1
    2
    3
    (if 3 > 2 then 4 else 5)
    6
]