我尝试将地图功能写成咖喱和翻转. (首先转换函数然后收集).我写了函数,编译器接受了它.但我无法称呼它.编译器给出没有提供参数的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的操场内写的
最佳答案 这里的问题是地图没有足够的锁定 – 什么样的集合是A?您不能编写生成泛型函数的泛型函数 – 当您调用它时,必须完全确定所有占位符的类型.
这意味着只要您完全指定A和B的类型,就可以按照定义调用map函数:
// 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]