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

Scala中的currying的好处

发布时间:2020-12-16 18:36:09 所属栏目:安全 来源:网络整理
导读:我想澄清有关 scala currying的好处.根据“ Scala第二版编程” – “currying一种用多个参数列表编写函数的方法.例如 def f(x:Int)(y:Int)是带有两个参数的curried函数 名单.通过传递多个参数来应用curried函数 列表,如:f(3)(4).但是,也可以写一部分 应用
我想澄清有关 scala currying的好处.根据“ Scala第二版编程” – “currying一种用多个参数列表编写函数的方法.例如
def f(x:Int)(y:Int)是带有两个参数的curried函数
名单.通过传递多个参数来应用curried函数
列表,如:f(3)(4).但是,也可以写一部分
应用curry函数,如f(3).“”c“

与创建相关的一个好处是部分应用了这样的功能

def multiplyCurried(x: Int)(y: Int) = x * y 
def multiply2 = multiplyCurried(2) _

但是我们也可以使用部分应用的函数而不用currying

def multiplyCurried(x: Int,y: Int) 
def multiply2 = multiplyCurried(2,_)

你能举几个例子,currying会有什么好处吗?

解决方法

当您有隐式参数时,Curry函数变得非常有用.

以期货的地图功能为例:

map[S](f: (T) ? S)(implicit executor: ExecutionContext): Future[S]

第二个参数是隐式的,这个定义允许你编写表达式

val f2 = f1.map(x => x)

当你在范围中有隐含值时.

咖喱有用的另一个地方是Scala代码中的常见模式,您希望将函数传递给方法(例如,它可能是回调函数).

以输入流的“贷款”模式为例,它允许您在不考虑正确关闭资源的情况下使用流

def withInputStream[T](opener: => InputStream)(f: InputStream => T): T = ...

withInputStream(new InputStream("hello.txt")) { inputStream =>
  readLines(inputStream)
}

这种语法使代码在很多情况下更加清晰

(编辑:李大同)

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

    推荐文章
      热点阅读