括号的使用在F#中真正意味着什么?

时间:2015-11-10 13:57:22

标签: f#

我需要帮助理解以下陈述:

calendar = Calendar.getInstance(); 
// CalendarState for DayOfWeek: Sunday 1, Monday 2, ... Saturday 7
int currentDay = calendar.DAY_OF_WEEK;
logger.severe("CURRENT DAY OF WEEK: " + currentDay);

具体来说,我对使用括号的规则感到困惑。

  1. 在F#中,括号的使用到底意味着什么?
  2. 括号中包含哪种类型的集合/集合? (即数组,序列号,列表等)
  3. 可以在括号内使用任何返回集合的表达式吗?
  4. 注意

    我对F#一无所知。所以请原谅我的无知。

3 个答案:

答案 0 :(得分:4)

这些是F#

中使用的括号

()

(1, 2)                      // Tuple (separator is a comma)
()                          // empty tuple, called unit

[]

[  1; 2  ]                  // List
[]                          // List.empty 

[| 1; 2 |]                  // Array
[||]                        //  Array.empty

{}

seq { yield 1; yield 2  }   // Sequence
Seq.empty                   // empty Sequence, not {} 

async { return 1 }          // Computation Expressions, e.g. async

type record =               // Record type definition
    { Name : string 
      Age  : int
    }

<>

type A<'T> = A of 'T              

可以很容易地组成类型

let composition = 
    async { return
                [| 
                    [ ("A",1); ("B",2) ]
                    [ ("C",3) ] 
                |]
    }
// val composition : Async<(string * int) list []>

答案 1 :(得分:2)

打破它。

let step1 = [ for i in 1..4 -> i, true ]
let step2 = step1 |> Map.ofSeq

然后你可以阅读&#34;签名&#34;每一步:

val step1 : (int * bool) list = [(1, true); (2, true); (3, true); (4, true)]
val step2 : Map<int,bool> = map [(1, true); (2, true); (3, true); (4, true)]
然后,步骤1是一个列表,因此括号用于列表(列表表达式)。 在列表中有一个int和bool(int * bool)的元组(代数数据类型,产品类型)(注意*为&#39; product&#39;)。

step2是一个Map,是从序列创建的,list也是一个序列,这就是为什么它起作用的原因(或者列表支持序列接口)。 ofSeq应该是我猜的总赠品。

使用Map.ofList可能会减少混淆,但等效

let step1 = [ for i in 1..4 -> i, true ]
let step2 = step1 |> Map.ofList 

val step1 : (int * bool) list = [(1, true); (2, true); (3, true); (4, true)]
val step2 : Map<int,bool> = map [(1, true); (2, true); (3, true); (4, true)]

您可以阅读一些文档,例如: https://msdn.microsoft.com/en-us/library/dd233230.aspx

现在把我的证书从你的课程发给我......; - )

答案 2 :(得分:1)

[ sequence-expression ]

创建一个列表

其他类型的括号创建不同类型的集合,例如。 <{3}}或seq { ... }分别用于序列(IEnumerable<T>)或数组。

  

可以在括号内使用任何返回集合的表达式吗?

排序。创建各种集合(例如yield value)有很大的支持,包括合并子集合(yield! expression)。

对于快速回答真的太过分了。有关F#Reference的链接将向您展示其范围。