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

Scala flatmap签名定义

发布时间:2020-12-16 09:06:25 所属栏目:安全 来源:网络整理
导读:也许我不了解一些基本原理,但一般来说flatMap的签名是什么?让我们想象一下,我想实现类型T支持表达式,然后我需要使用T实现的map,flatmap和withFilter.是否有类似的接口? 更确切地说,签名的来源是什么: class T[+A] { def flatMap[B](f: (A) = T[B]): T[B]}
也许我不了解一些基本原理,但一般来说flatMap的签名是什么?让我们想象一下,我想实现类型T支持表达式,然后我需要使用T实现的map,flatmap和withFilter.是否有类似的接口?

更确切地说,签名的来源是什么:

class T[+A] {

    def flatMap[B](f: (A) => T[B]): T[B]

}

或者这是一个定义?我可以用不同的签名实现flatmap吗?

解决方法

一般来说flatMap有签名:

class T[+A] {

def flatMap[B](f: (A) ? T[B]): T[B]
def map[B](f: (A) ? B): T[B]

}

例如选项:

def flatMap[B](f: (A) ? Option[B]): Option[B]

对于Seq:

def flatMap [B](f:(A)?Seq[B]):Seq [B]

当然,在scala API中,您将看到Seq,List的其他签名 – 因为特征TraversableLike中的通用签名适用于所有集合.

对于monad函数map应该:

m map f == m flatMap (x => unit(f(x)))

单位单位(x)=单(x),例如:

>列表是monad,单位为(x)= List(x)
> Set是monad,单位为(x)= Set(x)
>选项是monad,单位(x)= Some(x)

更新
flatMap / map没有界面.查看示例(复制到REPL):

class C[+A](val a:A) { 
 def flatMap[B](f:(A) => C[B]):C[B] = f(a)
 def map[B](f:(A)=>B):B = f(a)
}

然后在REPL中调用方法:

scala> for { k<- new C(3)} yield {k}
res2: Int = 3

(编辑:李大同)

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

    推荐文章
      热点阅读