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

Scala中map(f)与map(_.f)的区别及map(toString)异常结果成因

Scala中map(toString)和map(_.toString)的差异原因

二者传入map的参数本质完全不同,是Scala标识符解析规则和隐式转换共同导致的差异:

a.map(toString)的实际执行逻辑

  1. 独立书写的toString标识符会优先解析为当前上下文下this对象的无参toString方法,首先执行该方法得到一个String类型的返回值。
  2. List[Int]的map方法要求入参是Int => 任意类型的函数,而Scala中String默认隐式兼容Int => Char的函数类型:字符串(下标)等价于调用字符串.charAt(下标),返回对应索引位置的字符。
  3. 你的示例中List元素为1、2、3,相当于依次将1、2、3作为下标,传入this.toString返回的字符串中取字符,最终得到三个字符的列表。
  4. 你看到的l、i、n就是当前上下文this的toString结果里,索引为1、2、3位置的三个字符。你可以直接在REPL中执行println(toString)查看完整字符串,核对索引位置的字符即可验证。

a.map(_.toString)的执行逻辑

这个写法显式定义了匿名函数x => x.toString,是对List中的每个Int元素自身调用toString方法,因此得到的就是1、2、3转换为字符串的结果。

逻辑验证

你可以运行以下代码复现你遇到的输出,确认逻辑正确:

val testStr = "xline_test"
println(List(1,2,3).map(testStr))
// 输出:List(l, i, n)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:15:01