我想用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编译器不应该给我这个错误。还有其他方法可以避免括号和括号吗?