没有给出任何作业

Sal*_*ara 2 f#

我有以下代码:

type Client = 
      { Name : string; Income : int ; YearsInJob : int
        UsesCreditCard : bool;  CriminalRecord : bool }

type QueryInfo =
      { Title     : string
        Check     : Client -> bool
        Positive  : Decision
        Negative  : Decision }

    and Decision = 
       | Result of string
       | Querys  of QueryInfo

let tree =
       Querys  {Title = "More than €40k"
               Check = (fun cl -> cl.Income > 40000)
               Positive = moreThan40
               Negative = lessThan40}
Run Code Online (Sandbox Code Playgroud)

但在最后一行:

 Querys  {Title = "More than €40k"
                   Check = (fun cl -> cl.Income > 40000)
                   Positive = moreThan40
                   Negative = lessThan40}
Run Code Online (Sandbox Code Playgroud)

我有一个erorr:

No assignment has given for field 'Check' of type 'Script.QueryInfo'
Run Code Online (Sandbox Code Playgroud)

Mar*_*ann 6

F#是空白区域敏感的,这意味着使用空格来表示范围.给定的代码无法编译,因为Check显示在左侧太远.

另一方面,这应该编译(如果moreThan40并且lessThan40正确定义):

let tree =
       Querys {Title = "More than €40k"
               Check = (fun cl -> cl.Income > 40000)
               Positive = moreThan40
               Negative = lessThan40}
Run Code Online (Sandbox Code Playgroud)

这里的花括号不表示范围,而是表示记录的开头和结尾.由于OP中的缩进不正确,编译器会将Check绑定视为记录表达式的范围之外.这就是它抱怨没有任何价值被绑定到该领域的原因Check.

直到你习惯了重要的空白区域,它可能有点烦人,但它确实可以让你远离大量的显式打开和关闭范围(例如用大括号),所以在我看来,一旦你得到它就会有好处习惯了.