F#,为什么我不能访问"Item"成员

Gos*_*win 4 arrays f#

在F#中,为什么我不能在这里访问Array上的"Item"成员:

let last (arr:System.Array) =
    let leng = arr.Length
    arr.[leng-1]   // Error: Field, constructor or member "Item" is not defined.
Run Code Online (Sandbox Code Playgroud)

Wei*_* Ma 5

你能试试吗?

let last (arr:_[]) =
       let leng = arr.Length
       arr.[leng-1]
Run Code Online (Sandbox Code Playgroud)

  • @Goswin您可以将`System.Array`视为所有具体数组类型的抽象基类,例如`int []`.重要的是缺少类型参数.编译器应该如何知道数组包含哪种元素.`Object`作为所有类型的基本类型并不是一个好的答案,因为静态无法保证类型安全.魏玛的答案定义了一个通用函数.这样你就可以处理具体的数组类型.`_ []`使用通配符语法来定义类型参数.`'a []`是等价的.它是一个"a"数组,它是`System.Array`的子类型 (3认同)
  • 通用数组类型注释的其他等效语法:`array<_>`、`array<'a>`、`_ array`、`'a array` (2认同)