将 scala 中的 IO[列表[字符串]] 转换为逗号分隔的字符串



我有一个IO[List[String]](URL字符串(,我想将其转换为逗号分隔的字符串。有我可以使用的联接吗?我正被IO型所困扰。

您可以使用map方法将函数应用于IO操作的结果:

def toCommaSeparated(
io: IO[List[String]]
): IO[String] =
io.map(_.mkString(", "))

有一种方法。您可以在最后使用unsafeRunSync()unsafePerformIO()一次来评估封装的代码。

但我建议不要这样做,因为IO的目的是首先封装副作用代码,否则会使代码变得不纯净,被包裹在IO中,除非我们希望它这样做,否则无法进行评估

以一元的方式,您可以使用mapflatMap函数编写代码来组成其他函数,理想情况下,最后只调用其中一个不安全的操作一次。从一元上下文中获取值首先违背了它的目的,而且通常会在设计中暗示代码的味道。

更合乎逻辑的方法是使用Comonad,它有一个extract方法,而该方法采用F[A]并提取A。您必须确保在调用F[A]时可以从它获得A(例如,如果列表为空,则无法从List[A]获得A(。

最新更新