【发布时间】:2020-06-19 03:07:49
【问题描述】:
我正在学习 scala 并阅读了这个名为“currying”的概念。我知道它是用来划分函数中的参数并一一传递的。因此,据我了解,我尝试在下面创建一个简单的基本柯里化函数:
def add_num(a:Int,b:Int)(c:Int):Int={a+b+c}
add_num(10,20)
add_num(10)
但是当我用值 10 和 20 调用函数时,它给了我一个错误。我的理解是它会记住这些值,然后我可以将第三个值分别作为 10 传递。我无法理解这个概念。有人可以帮助我从最基本的术语中理解这个概念。
错误是缺少方法 add_num 的参数列表。未提供的方法仅在执行函数类型时转换为函数。
【问题讨论】:
-
这能回答你的问题吗? Curried function in scala
-
试试
val almost = add_num(10,20) _,然后是almost(7)。 -
我试过这个 val f = add_num(10,20)(_) f(10),结果是 40。但我不明白为什么我必须使用占位符然后传递它的值,如果我仍然必须这样使用它,那么柯里化有什么好处。
-
好处是您现在将部分应用的函数作为变量中的一个单独对象提供给不需要了解前两个参数的应用程序的其他部分。考虑您的函数调用 API。应用程序中设置凭据的部分可以使用一个函数来传递 API 访问密钥。应用程序的其余部分就不再需要关心这些了。
-
@VyomVerma 柯里化的重点不是一次应用所有参数,而是能够将
almost传递到程序中的其他地方,如Thilo所说。如果你想一次给出所有参数,你仍然可以使用add_num(10,20)(7)!
标签: scala