没有给出任何作业

时间:2015-11-07 06:01:17

标签: 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}

但在最后一行:

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

我有一个erorr:

No assignment has given for field 'Check' of type 'Script.QueryInfo'

1 个答案:

答案 0 :(得分:6)

F#是对空格敏感的,这意味着使用空格来表示范围。给定的代码不会编译,因为Check显示在左侧太远。

另一方面,这应该编译(如果正确定义了moreThan40lessThan40):

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

这里的花括号并不表示范围,而是表示记录的开头和结尾。由于OP中的缩进不正确,编译器将Check绑定视为在记录表达式的范围之外。这就是它抱怨没有值绑定到字段Check的原因。

在你习惯重要的空白区域之前,它可能有点烦人,但它确实可以避免大量显式打开和关闭范围(例如使用大括号),所以在我看来,一旦你习惯它就会受益。