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

与Scala中的“提升”功能混淆

发布时间:2020-12-16 18:59:51 所属栏目:安全 来源:网络整理
导读:在书 Functional Programming In Scala中,有一个’Lift’的例子,其中A =类型的函数. B被提升为选项[A] =选项[B]. 这就是电梯的实施方式: def lift[A,B](f: A = B):Option[A] = Option[B] = _ map f 我对此有几个困惑: 第一个是,这里的’_’是什么?其次,当
在书 Functional Programming In Scala中,有一个’Lift’的例子,其中A =>类型的函数. B被提升为选项[A] =>选项[B].

这就是电梯的实施方式:

def lift[A,B](f: A => B):Option[A] => Option[B] = _ map f

我对此有几个困惑:

第一个是,这里的’_’是什么?其次,当我从def中删除返回类型时,期望类型推断能够发挥它的魔力,我得到以下异常:

scala> def lift[A,B](f: A => B) =  _ map f
<console>:7: error: missing parameter type for expanded function ((x$1) => x$1.map(f))
       def lift[A,B](f: A => B) =  _ map f

有人能解释一下这里发生了什么吗?

谢谢

解决方法

> lift是一个返回函数的函数.返回的函数通过将函数f应用于该值来提升值(未命名).要解除的未命名值称为_.你当然可以给它一个更明确的名字:

def lift[A,B](f: A => B): Option[A] => Option[B] = { value => value map f }

>该函数的返回类型(返回的函数)需要显式声明或隐式确定.如编写的那样编译可以推断出要返回的是一个选项[B](更具体地说,提升返回一个函数选项[A] =>选项[B](明确说明),而该函数有返回类型选项[B](含蓄地确定)).如果没有该类型信息,编译器需要一些其他指示返回类型的信息.

或者,定义提升因此:

def lift[A,B](f: A => B) = { value: Option[A] => value map f }

在这里,您明确说明了值的类型,编译器可以推断出来

>返回的函数的返回类型为Option [B],因为f:A => B会将A到B映射到>电梯的返回类型为选项[A] =>选项[B].

(编辑:李大同)

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

    推荐文章
      热点阅读