scala - 不同的咖喱方法
问题描述
下面提到的方法有什么区别?
我在scala中搜索了currying,我得到了这两种currying语法。
def add1(x:Int)(y:Int) = {x+y}
def add2(x:Int) = (y:Int) => {x+y}
我想知道这两种方法有什么区别
解决方案
柯里化函数是可以像这样应用的函数
f(1)(2)(3)...(n)
也就是说,我们一次可以应用一个论点。让我们尝试一次将您的方法应用一个参数,看看会发生什么
add1(1) // error
add2(1) // ok
add1
因此,尽管我们可以写,但我们并不能做到这一点
add1(1)(2) // res0: Int = 3
add2(1)(2) // res1: Int = 3
但是像这样显式调用 eta 扩展
val f1 = add1 _ // f1: Int => (Int => Int) = <function>
val f2 = add2 _ // f2: Int => (Int => Int) = <function>
我们看到我们得到了等效的柯里化函数,因此
f1(1) // ok
f2(1) // ok
推荐阅读
- ios - 如何在 pdf 中设置可编辑文本字段(注释)的值?
- wordpress - 在 WooCommerce 电子邮件通知中添加基于产品标签的自定义消息
- android - Kotlin 和 Retrofit:如何处理 HTTP 400 响应?
- python - 我不断收到 StyleGAN 的断言错误
- tensorflow - 如何从 TF Hub 获取 Bert 分词器的词汇文件
- geoserver - Geoserver ncWMS 扩展,GetTimeseries 不起作用
- python - 列表中的中值时间增量
- jenkins - 如何使用 httprequest 插件 jenkins 发送任何文件
- powerbi - Power BI DAX:如何提取第二最近的日期
- java - 可信网络活动 (TWA) 与原生应用内购买相结合