[英]Scala: currying vs closure
我可以使用闭包来定义 function ,如下所示:
def product(x: Int) = (y: Int) => x * y
val productBy3 = product(3)
println(productBy3(6)) // 18
或者,使用柯里化:
def curriedProduct(x: Int)(y: Int) = x * y
val productBy3 = curriedProduct(3)_
println(productBy3(6)) // 18
一种方法比其他方法有什么优势/劣势?
第一个是返回 function 的方法示例。 第二个是具有多个参数列表的方法的示例。
你使用它们的方式,没有区别。
当称为product(3)(6)
时,第二个可能会快一点,但不会达到通常会引起关注的程度。
当预期的调用方式是product(3)
时,我会使用第一种形式,如果正常的调用方式是product(3)(6)
,我会使用第二种形式。
最后,我想提出一种可能性
def product(i: Int, j: Int) = i * j
val productBy3 = product(3, _)
println(productBy3(6)) //18
在这种情况下,我真的没有看到使用第二种形式而不是这种替代方案或第一种替代方案的任何好处。 使用多个参数列表可能有助于在 scala 2 中进行类型推断(参见https://docs.scala-lang.org/tour/multiple-parameter-lists.ZFC35FDC70D5FC69D269883A822C7A53无论如何,这里的推断没有问题)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.