涉及“预期的不完整结构化构造”的级联错误

时间:2014-03-22 01:53:51

标签: f# compiler-errors

给出以下代码:

namespace Backend

open System
open System.Linq
open Npgsql

module helpers =
    let rec second_elms lst =
        match lst with
        | [] -> []
        | (d,o)::xs -> o::(second_elms xs)

    let folder acc elm =
        let result_list,acc_to_substract = acc
        result_list::(elm-acc_to_substract),elm

type ChartManager() =

    static member ConvertOutputNumbersToDifferenceSegments(listOfOutputValuesForADay: list<DateTime*int>) =

        let secs = helpers.second_elms listOfOutputValuesForADay

        let trans = List.fold
            helpers.folder
            ([],snd(secs.First()))
            secs.Tail

        let sndDateTime = fst(listOfOutputValuesForADay.ElementAt(1))

        for each_output in fst(trans) do
            yield (sndDateTime,each_output)

它给了我很多错误,但我猜大多数只是来自“trans”块中主要错误的级联错误,其中显示(突出显示单词helpers):

  

绑定中的意外标识符。在此点或其他标记之前或之前的预期不完整结构化构造。

这意味着什么?

3 个答案:

答案 0 :(得分:2)

使用轻量语法正确缩进

 let trans = 
       List.fold
           helpers.folder
           ([],snd(secs.First()))
           secs.Tail

 let trans = List.fold
                helpers.folder
                ([],snd(secs.First()))
                secs.Tail

如果是单个语句,要拆分多行,则需要缩进才能传递语句的开头。

答案 1 :(得分:1)

当你这样做时

let trans = 

等号后=设置新的越位列后的第一件事。只要您只在不在列的列上或之后书写,您就可以定义trans的绑定。只要您在其左侧书写,就会回到trans之外,在这种情况下定义成员ConvertOutputNumbersToDifferenceSegments

然而,当你回到外面时,你经常(*)必须一直回到以前的一些越位专栏。在这种情况下,最近的一个由l中的let trans ...设置。

共:

(* v ----------------- offside column set by 'let' *)
(*             v------ offside column set by '='.  *)

   let trans = List.fold
       helpers.folder               (* <-- Half way back. Error. *)
       ...

   let trans = List.fold 
               helpers.folder       (* <-- Binding 'trans'. *)
               ...

   let trans = List.fold
                  helpers.folder    (* <-- Also binding 'trans'. *)
                  ...

   let trans = List.fold            (* <-- Binding 'trans'. *)
   helpers.folder                   (* <-- Binding in member `Convert...` 
   ...                                     Yields type error in your case. *)

有越位专栏here的简要指南。

(*)确切的规则因环境而异。

答案 2 :(得分:0)

猜测一下,由于helpers.folder没有缩进到List.fold

,因此缩进缩进

我会把它改成

    let trans = List.fold helpers.folder ([],snd(secs.First())) secs.Tail