通用咖喱地图功能

时间:2015-03-05 21:50:39

标签: swift function-composition

我尝试将map函数写成curried并翻转。 (首先转换函数然后收集)。我写了函数,编译器接受了它。但我无法称呼它。编译器给出了没有map func和提供的参数。无论如何这里是我写的功能:

func map <A: CollectionType, B> (f: (A.Generator.Element) -> B) -> A -> [B] {
    return { map($0, f) }
}

这是测试代码:

func square(a: Int) -> Int {
    return a * a
}

map(square)

注意:代码使用Xcode 6.3 beta 2在游乐场内编写

1 个答案:

答案 0 :(得分:2)

这里的问题是map没有足够锁定 - A是什么类型的集合?您不能编写生成泛型函数的泛型函数 - 当您调用它时,必须完全确定所有占位符的类型。

这意味着您可以按照定义调用map函数,只要您完全指定AB的类型:

// fixes A to be an Array of Ints, and B to be an Int
let squarer: [Int]->[Int] = map(square)

squarer([1,2,3])  // returns [1,4,9]

// fixes A to be a Slice of UInts, and B to be a Double
let halver: Slice<UInt>->[Double] = map { Double($0)/2.0 }

halver([1,2,3])   // returns [0.5, 1, 1.5]