给定这个简单的柯里化(Currying)函数:
func foo(x:Int)(y:Int)->String{
return "\(x) with \(y)"
}
我希望能够做这样的事情:
let bar = foo(1)
bar(2) //<- error: Missing argument label 'y:' in call
如果我将调用标记为 bar
(如 bar(y:2)
),一切正常。但是我不明白为什么参数名称是必需的。有什么办法可以避免吗?
显而易见的事情:
func foo(x:Int)(_ y:Int)->String ...
似乎不起作用。
最佳答案
这是一个错误,您应该在 bugreport.apple.com 提交一份雷达报告
作为确认,如果你像这样放置下划线
func foo(x: Int)(_ y: Int) -> String
你得到一个警告
Extraneous '_' in parameter: 'y' has no keyword argument name
所以它明确表示 y
没有外部名称,但在调用时仍然需要一个,这显然违反了语言规范。
关于swift - 为什么柯里化(Currying)函数需要外部参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24170906/