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

Scala自定义MyList的zipWith函数类型推断报错问题

问题分析与解决

你遇到的问题是Scala函数字面量的语法使用错误,下面详细解释原因和正确用法:

错误原因

你写的(Int,String)=>_+"-"+_是错误的语法。在Scala中,函数参数的类型标注必须放在参数名称后面(比如(a: Int, b: String)),而不是直接将类型作为参数名使用。

你的写法相当于把参数命名为Int和String,然后用下划线_来引用这些参数,但Scala的占位符语法_无法和这种命名方式匹配——编译器无法推断_对应的是哪个参数,因此抛出类型推断失败的错误。

为什么_+"-"+_能正常工作

这是Scala的占位符函数语法,规则是:

  • 每个_对应函数的一个参数,按顺序匹配函数签名的参数位置
  • 编译器会根据上下文自动推断参数类型:
    • 你的list是MyList[Int],所以zipWith的第一个参数类型A是Int
    • 你指定了zipWith[String, String],所以第二个参数类型B是String
    • 因此编译器能推断出第一个_对应Int类型参数,第二个_对应String类型参数,最终生成符合(Int, String) => String的函数。

正确的写法示例

除了占位符语法,你还可以用以下两种显式写法:

  1. 显式指定参数类型:
println(list.zipWith[String, String](listOfStrings, (a: Int, b: String) => a + "-" + b))
  1. 省略参数类型(编译器可通过上下文推断):
println(list.zipWith[String, String](listOfStrings, (a, b) => a + "-" + b))

这两种写法都能正常工作,和占位符语法的效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:05:13