加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的curried函数背后的基本原理是什么?

发布时间:2020-12-16 09:02:33 所属栏目:安全 来源:网络整理
导读:我只是 Scala的新手,对我来说似乎有点困惑,为什么Scala提供“curried functions”,例如: //curried functiondef add(lhs: Int)(rhs: Int) = lhs + rhs//so we can do partially binding likeval add1 = add(1)_ 它令人困惑,因为Scala已经为正常功能提供了“
我只是 Scala的新手,对我来说似乎有点困惑,为什么Scala提供“curried functions”,例如:

//curried function
def add(lhs: Int)(rhs: Int) = lhs + rhs
//so we can do partially binding like
val add1 = add(1)_

它令人困惑,因为Scala已经为正常功能提供了“部分应用”,例如,

//normal function
def add(lhs: Int,rhs: Int) = lhs + rhs
//also supports partially application
val add1 = add(1,_: Int)

所以我的问题是:除了部分应用之外,还有其他方面使用curried函数而不是Scala中的普通函数吗?

EDT1:感谢您的回复.我想我从下面的所有答案中学到了新东西.

解决方法

把理论动机放在一边(参见:维基百科中的 Contrast with partial function application关于currying),有一个实际的含义.当最后一个参数是一个代码块时,语法更简单,更易读.

比较以下方法:

def test1(name: String,callback: => Unit) {}
def test2(name: String)(callback: => Unit) {}

第二种方法调用看起来更好,比较:

test("abc",{
    //some code
})

test2("abc") {
    //some code
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读