簡體   English   中英

Scala:柯里化與閉包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM