scala - 是否有也应用上下文的地图功能?
问题描述
Scala 中是否有一个map
类似的函数可以呈现:M[A] -> M[B]
但还允许您指定一些类似于 in 的上下文信息scanLeft
?例如,类似:
def mapWithContext(context: C, f: (C, A) => (C, B)): M[B]
f
将被传递 1) 类型的上下文信息C
2) 类型列表中的当前元素,A
然后它将返回 1) 更新的上下文信息C
2) 转换后的类型列表元素B
。但是,与它不同的是,scanLeft
它会丢弃它正在构建的集合中的上下文信息,只B
返回
解决方案
不完全是,但新的(Scala 2.13)unfold()
方法接近了。它适用于几乎所有的集合类型,可变的和不可变的。这是List
.
def unfold(init: S)(f: (S) => Option[(A, S)]): List[A]
它采用初始状态并不断应用f()
,直到它返回None
。
因此,您可以将初始状态设为元组(S, M[A])
并生成f()
函数f:(S,M[A]) => Option[(B, (S,M[A]))]
。代码将f()
剥离头部M[A]
以产生每个B
元素,直到返回M[A]
时为空。f()
None
推荐阅读
- typescript - 打字稿如何比较声明的类型
- javascript - 如何使用键获取 javascript 对象的值
- xcode - macOS 单元测试中的 NSAllowsArbitraryLoads
- kubernetes - 如何跳过 Argo 工作流程的步骤
- java - 用实际值替换字符串中的变量 - Groovy
- javascript - 如何正确拆分 url 然后在 javascript 中获取剩余部分?
- sql - 来自多个表的聚合不计算在内
- python - 如何在 python 中创建列表?
- reactjs - 如何对齐表格分页内部组件(标题、操作)
- android - 在 recyclerview 中使用 ItemTouchHelper 控制滑动项目速度