通用咖喱地图功能
Generic curried map function
我尝试将 map
函数编写为 curried 和 flipped。 (首先转换函数然后收集)。我确实编写了函数并且编译器接受了它。但我无法调用它。编译器给出没有 map
func with supplied arguments。不管怎样,这是我写的函数:
func map <A: CollectionType, B> (f: (A.Generator.Element) -> B) -> A -> [B] {
return { map([=10=], f) }
}
这是测试代码:
func square(a: Int) -> Int {
return a * a
}
map(square)
注意:代码是在 Xcode 6.3 beta 2
playground 中编写的
这里的问题是map
还不够locked-down——A
是什么样的collection?您不能编写生成泛型函数的泛型函数——调用它时,必须完全确定所有占位符的类型。
这意味着您可以按照定义调用 map
函数,只要您完全指定 A
和 B
的类型:
// 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([=10=])/2.0 }
halver([1,2,3]) // returns [0.5, 1, 1.5]
我尝试将 map
函数编写为 curried 和 flipped。 (首先转换函数然后收集)。我确实编写了函数并且编译器接受了它。但我无法调用它。编译器给出没有 map
func with supplied arguments。不管怎样,这是我写的函数:
func map <A: CollectionType, B> (f: (A.Generator.Element) -> B) -> A -> [B] {
return { map([=10=], f) }
}
这是测试代码:
func square(a: Int) -> Int {
return a * a
}
map(square)
注意:代码是在 Xcode 6.3 beta 2
playground 中编写的这里的问题是map
还不够locked-down——A
是什么样的collection?您不能编写生成泛型函数的泛型函数——调用它时,必须完全确定所有占位符的类型。
这意味着您可以按照定义调用 map
函数,只要您完全指定 A
和 B
的类型:
// 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([=10=])/2.0 }
halver([1,2,3]) // returns [0.5, 1, 1.5]