首页 > 解决方案 > F# 中的 Array.replicate 和 Array.create 之间有什么功能区别吗?

问题描述

我正在重构一些代码,并注意到在使用重复相同的值初始化数组时使用了一些编码器Array.replicate和其他编码器。Array.create两个函数的签名是相同的:

> Array.create;;
val it : (int -> 'a -> 'a [])

> Array.replicate;;
val it : (int -> 'a -> 'a [])

我还注意到,两者都提高ArgumentException了负值count,并且都允许计数为零。我的直觉告诉我它们是同义词,但后来我在F# For Fun And Profit上找到了这句话:

Array.create 基本上与replicate 相同(尽管实现方式略有不同!)但replication 仅在F# v4 中为Array 实现。

是否有人知道存在哪些差异,或者出于所有意图和目的,它们是否是彼此的别名(也许replicate只是为了与 平价而添加seq)?

标签: arraysf#

解决方案


代码是等效的,不应有任何不同的执行方式。

似乎它是在 List 之后添加到 Seq 和 Array 的,所以可能是为了 API 奇偶校验。这是一个旧的提交(2014 年),快速搜索问题并没有发现任何可以肯定解释更改原因的问题。https://github.com/dotnet/fsharp/commit/173d833660767fd24d523d09f317179cc3c3f4b9


推荐阅读