Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift单参数,自动关闭,完全不带大括号_Swift_Functional Programming_Closures - Fatal编程技术网

Swift单参数,自动关闭,完全不带大括号

Swift单参数,自动关闭,完全不带大括号,swift,functional-programming,closures,Swift,Functional Programming,Closures,我想用Apple Swift语言实现Haskellelem函数 这看起来不是很难实现: func elem<T: Equatable>(item: T) -> [T] -> Bool { return { arr in find(arr, item) != nil } } elem(2)([1,2,3]) 这个错误是一个真正的问题,看起来像是编译器的缺陷。但是我们需要更深入地避免括号{},这可以通过@autoclosure实现: func elem<T:

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

这看起来不是很难实现:

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

elem(2)([1,2,3])
这个错误是一个真正的问题,看起来像是编译器的缺陷。但是我们需要更深入地避免括号
{}
,这可以通过
@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]
func元素(项:@autoclosure()->T)->(@autoclosure()->[T])->Bool{
在find(arr(),item())中返回{(arr:@autoclosure()->[T])!=nil}
}
元素2[1,2,3]
我们也有同样的错误


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

我认为你不能随意删除大括号。不管你喜不喜欢,斯威夫特的语法要求大量的参数来强制应用。因此,这不是解决此类问题(语法更改建议)的合适论坛。你最好在苹果的Swift论坛上发布这个问题,并与Chris Lattner或SevenTenEleven联系
Consecutive statements on a line must be separated by ':'
func elem<T: Equatable>(item: @autoclosure ()->T) -> (@autoclosure ()->[T]) -> Bool {
    return { (arr: @autoclosure ()->[T]) in find(arr(), item()) != nil }
}

elem 2 [1,2,3]