首页 > 解决方案 > 是否有也应用上下文的地图功能?

问题描述

Scala 中是否有一个map类似的函数可以呈现:M[A] -> M[B]但还允许您指定一些类似于 in 的上下文信息scanLeft?例如,类似:

def mapWithContext(context: C, f: (C, A) => (C, B)): M[B]

f将被传递 1) 类型的上下文信息C2) 类型列表中的当前元素,A 然后它将返回 1) 更新的上下文信息C2) 转换后的类型列表元素B。但是,与它不同的是,scanLeft它会丢弃它正在构建的集合中的上下文信息,只B返回

标签: scala

解决方案


不完全是,但新的(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


推荐阅读