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