F# 多行条件表达式

4
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
]

导致编译器告诉我“不匹配的 '('”。显然,编译器不喜欢带括号的多行条件语句。为什么会这样呢?有没有什么方法可以解决呢?
这只是一个简单的例子,但在实际使用中,我将拥有任意复杂的递归表达式(因此需要在多行上拆分它),而我不想通过列表附加等方式打破表达式并进行命令式处理。
编辑: 这个可以工作:
let a = [
    1;
    2;
    3;
    if 3 > 2 then yield(
        4
    )else yield(
        5);
    6
]

但对于一个简单的三元操作符来说,它有些啰嗦了(5个关键字和4个括号!)。继续寻找更简洁的替代方案。

在您上面的第一个示例中,您在else之前有一个无效的; - user29439
2个回答

7
您只需要在添加 ( 后将 else 缩进到 if 左侧即可。
let a = [
    1;
    2;
    3;
    (if 3 > 2 then
        4
     else //same column as matching if
        5);
6
]

2
多行代码不需要分号。
let a = [
    1
    2
    3
    (if 3 > 2 then 4 else 5)
    6
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接