If statement for语句的Coffeescript语法问题

If statement for语句的Coffeescript语法问题,if-statement,coffeescript,conditional,If Statement,Coffeescript,Conditional,使用Coffeescript,我试图为两个变量在图形上设置fillColor设置条件;上次可见性和当前可见性。我的语法有点不正确。有什么建议吗 for set in datasets line.push data: set, lines: show: true fill: true opac

使用Coffeescript,我试图为两个变量在图形上设置fillColor设置条件;上次可见性和当前可见性。我的语法有点不正确。有什么建议吗

for set in datasets
            line.push
                data: set,
                lines:
                    show: true
                    fill: true
                    opacity: 0.7
                    fillColor: if lastVisibilty == 0 & curr_visibility == 0 
                        then "#C90E30"
                    else lastVisibilty == 0 & curr_visibility == 1
                        then "#439C32"
                    else lastVisibilty == 1 & curr_visibility == 0
                        then "#C90E30"
                    else
                        "#439C32"

这里有很多问题:

  • 当您使用单行程序时,如
    a=if b然后c else d
    ,您仅使用
    then
    ,如果您使用多行形式的
    if
    ,则不使用
    then
    s
  • 您有多个
    else
    分支,您的意思是
    else if
  • &
    &
    是不同的东西,
    &
    是一个位运算符,
    &
    是您正在寻找的逻辑连接
  • 您需要非常小心,并与缩进保持一致
  • 将这些调整应用到您的代码中,您将得到:

    for set in datasets
        line.push
            data: set,
            lines:
                show: true
                fill: true
                opacity: 0.7
                fillColor: if lastVisibilty == 0 && curr_visibility == 0 
                    "#C90E30"
                else if lastVisibilty == 0 && curr_visibility == 1
                    "#439C32"
                else if lastVisibilty == 1 && curr_visibility == 0
                    "#C90E30"
                else
                    "#439C32"
    
    但是,循环内的条件逻辑不依赖于
    (即循环不变),因此应将其考虑在内:

    fillColor = if lastVisibilty == 0 && curr_visibility == 0 
            "#C90E30"
        else if lastVisibilty == 0 && curr_visibility == 1
            "#439C32"
        else if lastVisibilty == 1 && curr_visibility == 0
            "#C90E30"
        else
            "#439C32"
    for set in datasets
        line.push
            data: set,
            lines:
                show: true
                fill: true
                opacity: 0.7
                fillColor: fillColor
    
    或者更好,将所有不变的东西推到循环之外,以进一步澄清代码:

    fillColor = if lastVisibilty == 0 && curr_visibility == 0 
            "#C90E30"
        else if lastVisibilty == 0 && curr_visibility == 1
            "#439C32"
        else if lastVisibilty == 1 && curr_visibility == 0
            "#C90E30"
        else
            "#439C32"
    lines =
        show: true
        fill: true
        opacity: 0.7
        fillColor: fillColor
    for set in datasets
        line.push
            data: set,
            lines: lines
    
    或者,由于for循环是一个表达式,您可以说:

    fillColor = if lastVisibilty == 0 && curr_visibility == 0 
            "#C90E30"
        else if lastVisibilty == 0 && curr_visibility == 1
            "#439C32"
        else if lastVisibilty == 1 && curr_visibility == 0
            "#C90E30"
        else
            "#439C32"
    lines =
        show: true
        fill: true
        opacity: 0.7
        fillColor: fillColor
    line = ({ data: set, lines: line } for set in datasets)
    
    当然,假设在循环之前,
    是空的;如果不是,则可以使用:


    要将循环的数据附加到

    中,您的答案非常正确,我在原始for循环之外添加了fillColor:if条件语句。但是,我现在遇到了一个新问题,它是由其中一个条件的curr_可见性变量引起的。我将在另一个问题中发布。
    line = line.concat({data: set, lines: line } for set in datasets)