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) 更新 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |