带有autoclosure的Swift单个参数,根本没有括号

时间:2014-08-30 23:33:41

标签: swift functional-programming closures

我想用Apple Swift语言实现Haskell elem函数。

这看起来不是很难实现:

func elem<T: Equatable>(item: T) -> [T] -> Bool {
    return { arr in find(arr, item) != nil }
}

elem(2)([1,2,3])

但我想跳过大括号争论。闭包类型的最后(或单个)参数可能是:

func elem<T: Equatable>(item: ()->T) -> (()->[T]) -> Bool {
    return { (arr: ()->[T]) in find(arr(), item()) != nil }
}

elem{2}{[1,2,3]}

但是我们有一个错误:

Consecutive statements on a line must be separated by ':'

这个错误是一个真正的问题,看起来像编译器不完美。但我们需要更深入地避免括号{},可以使用@autoclosure来实现:

func elem<T: Equatable>(item: @autoclosure ()->T) -> (@autoclosure ()->[T]) -> Bool {
    return { (arr: @autoclosure ()->[T]) in find(arr(), item()) != nil }
}

elem 2 [1,2,3]

我们也有同样的错误。

我认为Swift编译器不应该给我这个错误。还有其他方法可以避免括号和括号吗?

0 个答案:

没有答案