【发布时间】:2010-12-07 21:07:39
【问题描述】:
我能做到(x : int array)
但我只需要 300 个元素的数组,那我该怎么做 (x : int[300]) ?
无法通过 msdn 找到此类信息)
@Marcelo Cantos 没有理由,但我总是使用大小数组。为什么不呢?
【问题讨论】:
-
是否因为某种原因必须对其进行约束?
标签: f#
我能做到(x : int array)
但我只需要 300 个元素的数组,那我该怎么做 (x : int[300]) ?
无法通过 msdn 找到此类信息)
@Marcelo Cantos 没有理由,但我总是使用大小数组。为什么不呢?
【问题讨论】:
标签: f#
否。 F# 类型系统不支持诸如“大小为 300 的数组”之类的类型,即使支持,使用类型系统在编译时检查潜在的数组溢出也太不切实际而无法实现。
此外,“恰好有 300 个元素”在几乎所有情况下都是 F# 中的一个无用属性,因为有大量函数和原语可以处理任意大小的数组而没有任何溢出风险(map 或 @987654322 @, 例如)。当您可以轻松编写适用于任意数量元素的代码时,为什么还要编写适用于 300 个元素的代码?
如果您真的需要表示“恰好有 300 个元素”属性,您可以做的最简单的事情是围绕原生数组类型创建一个包装器类型。这使您可以将那些返回数组的操作限制为仅尊重 300 元素不变量的操作(例如来自另一个 300 元素数组的map,或长度属性始终为300 的create)。恐怕这并不像您希望的那么简单,但是由于 F# 本身并不支持 300 元素数组,因此您需要自己描述所有函数不变量。
【讨论】: