You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中map后调用andThen无打印输出,如何实现?

问题原因分析

你的第一段代码未生效,核心是用错了andThen的适用场景:andThen是函数(Function1/PartialFunction)专属方法,作用是组合两个函数的执行逻辑,而非集合的链式操作方法。

你在map返回的List实例上调用andThen,实际是利用了List实现PartialFunction的特性——此时List被当成了“按索引取元素”的偏函数,你组合了print函数,但根本没调用这个组合后的函数,所以打印逻辑完全没执行。最终函数返回Unit,在REPL中就显示成了"()"。

基于andThen的解决办法

要实现需求,你需要把“集合映射”和“遍历打印”分别包装成函数,再用andThen串联执行:

def multiPrint(list: List[Int], number: Int): Unit = {
  // 定义两个独立函数:一个负责映射处理,一个负责打印所有元素
  val mapFunc: List[Int] => List[Int] = _.map(_ * number)
  val printFunc: List[Int] => Unit = _.foreach(print)
  
  // 组合函数:先执行映射处理,再把结果传给打印逻辑,最后传入目标列表执行
  mapFunc.andThen(printFunc)(list)
}

也可以写成更简洁的内联形式:

def multiPrint(list: List[Int], number: Int): Unit = {
  ((_: List[Int]).map(_ * number)).andThen(_.foreach(print))(list)
}

这里andThen的作用是将两个函数串联:先通过第一个函数完成列表的映射转换,再将转换后的结果传入第二个函数执行遍历打印,完全符合你想要的链式调用逻辑。

内容的提问来源于stack exchange,提问作者LuizaBt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:00:32