鉴于这种简单的currying功能:
func foo(x:Int)(y:Int)->String{
return "\(x) with \(y)"
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
let bar = foo(1)
bar(2) //<- error: Missing argument label 'y:' in call
Run Code Online (Sandbox Code Playgroud)
如果我将调用标记为bar
(如在bar(y:2)
),一切正常.但我不明白为什么参数名称是必要的.有什么办法可以避免吗?
显而易见的事:
func foo(x:Int)(_ y:Int)->String ...
似乎不起作用.
这是一个错误,你应该在bugreport.apple.com上提交雷达
作为确认,如果您放置下划线,就像这样
func foo(x: Int)(_ y: Int) -> String
Run Code Online (Sandbox Code Playgroud)
你收到警告
参数中的多余'_':'y'没有关键字参数名称
所以它明确地说y
没有外部名称,但在调用时仍然需要一个,这显然违背了语言规范.
我不确定我是否完全理解你的柯里化。这是我的看法。我有一个函数 foo 如下:
func foo(x:Int, y:Int) -> String{
return "\(x) with \(y)"
}
let bar = foo(1, 2) // gives "1 with 2"
Run Code Online (Sandbox Code Playgroud)
我希望柯里化此函数来“修复” 的值x
,因此请按如下方式操作:
func fooCurry(x:Int) -> (Int -> String) {
func curry(y:Int) -> String {
return foo(x, y)
}
return curry
}
Run Code Online (Sandbox Code Playgroud)
上面返回一个新函数,可以按如下方式使用:
let curriedFoo = fooCurry(1)
let barWithCurry = curriedFoo(2) // gives "1 with 2"
Run Code Online (Sandbox Code Playgroud)
返回的函数fooCurry
具有签名(Int -> String)
,这意味着该参数没有外部名称。
归档时间: |
|
查看次数: |
1783 次 |
最近记录: |