发布于 2015-03-02 17:33:01
因为没有明显的方法来完成尾巴。任何关于如何做的选择都会导致一条不明显的尾巴。
诀窍是显式地延长您的最短列表,以匹配最长的长度和您期望的值。
如果zip为您这样做,您就无法知道它直观地填充了哪些值。它循环列表了吗?它是否重复了一个空值?你的类型的值是多少?
对于如何使用zip来直观地延长尾巴的方式,没有任何暗示,所以唯一合理的做法是使用可用的值,而不是编造用户可能不期望的值。
另外,请记住,您所指的是一个非常特定的、众所周知的、具有特定语义的函数。但这并不意味着你不能做一个类似但略有不同的功能。仅仅因为有一个执行x的通用函数,并不意味着您无法根据给定的目的来决定您想要做的x和y。
尽管请记住,这个函数和许多其他常见的FP样式函数是常见的,因为它们很简单,而且是广义的,所以您可以调整代码来使用它们,并得到您想要的行为。例如,在C#中,您可以只
IEnumerable<Tuple<T, U>> ZipDefaults(IEnumerable<T> first, IEnumerable<U> second)
{
return first.Count() < second.Count()
? first.Concat(Enumerable.Repeat(default(T), second.Count() - first.Count())).Zip(second)
: first.Zip(second.Concat(Enumerable.Repeat(default(U), first.Count() - second.count())))
}或者其他简单的事情。FP方法使修改变得如此简单,因为您可以重用部分,而且实现也非常小,因此创建您自己的修改版本非常简单。
https://softwareengineering.stackexchange.com/questions/274983
复制相似问题