swift - 为什么柯里化(Currying)函数需要外部参数名称?

标签 swift currying

给定这个简单的柯里化(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/

相关文章:

arrays - 在 Swift 中重复数组

ios - 通过点击单元格内的图像从 UITableViewCell 切换

ios - 使用带有 NavigationView 的 ScrollView 我得到空白的灰色空间

swift - 如何在 Apple Watch iOS 中获取 currentStandHour 值?

javascript - 这个函数实际上是做什么的?

jenkins - 用于并行执行的 Currying groovy CPS 闭包

swift - 在 Swift 中,为什么 GCD 不能与解析一起使用?

haskell - curry 语言的 CPS

f# - 反转部分函数参数顺序

javascript - 我可以让这个函数定义更短吗?