f# - 为什么在 F# 中将数组类型写成一个列表?

标签 f#

具有以下内容:

let a = "hello world".Split(' ')
返回类型是一个字符串数组,但类型写为:

System.String[]


我不明白为什么:
  • 你用 [| ... |] 声明一个数组但它显示为 [ ... ]在类型
  • 你用 [ ... ] 声明一个列表但它显示为 x list在类型

  • 另一个例子:
    ([| 3 |]).GetType()
    val it : System.Type =
      System.Int32[]
    
    为什么会这样?

    最佳答案

    这种不一致可能是因为 F# 是一种 .NET 语言。

  • 在 F# 中,您希望列表比数组更频繁,因此使用较短的语法 [ ... ] 是有意义的。用于列表和更长的语法 [| ... |]对于数组。
  • 在 .NET 中,数组类型写为 System.Int32[] .这是你从 GetType 得到的并且 F# 无法覆盖它,因为它来自 .NET 库。
  • 至于类型名称,你总是可以使用 'a list'a array如果你想明确地写类型。
  • 最不一致的特性是您可以编写数组类型,例如 int[]在 F# 中也是如此。我同意这令人困惑。我认为 F# 在这里只是采用了 C# 中使用的符号。但是,请注意,这也使您可以轻松定义多维数组,例如 int[,]int[,,] .我认为多维数组类型没有其他语法。
  • 关于f# - 为什么在 F# 中将数组类型写成一个列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66539002/

    相关文章:

    .net - Event.Trigger Event.Publish f#

    f# - 使用 F# 的代数数据类型来解决代数问题

    .net - 当所有使用的类型都是先验已知时,为什么此代码片段会导致 "Lookup on object of indeterminate type..."?

    f# - async { ... AsyncAdd ... } 和 async { ... do AsyncAdd ... } 有什么区别?

    winforms - F#:尝试打开 System.Windows.Forms 时未定义命名空间

    list - F# 中反转列表的列表

    haskell - 在 Haskell 中实现 FSharp 的 Int32.TryParse

    c# - 如何将弱类型 ICollection 转换为 F# 列表?

    f# - F# 库中是否存在 tee 函数?

    haskell - Monad 不就是一个语法糖吗?