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

Scala 2.12中使用布尔通配符调用高阶函数为何出现编译错误?

问题原因解析

在Scala 2.12中,Vector.count方法的签名是def count(p: A => Boolean): Int,它要求传入一个接收A类型参数、返回Boolean值的谓词函数。

当你写v.count(_)时,编译器需要把_解析成符合Boolean => Boolean的函数(因为v是Vector[Boolean],A的类型为Boolean),也就是等价于x => x的函数。但Scala 2.12的类型推断器在这里无法完成自动推断,核心原因如下:

  • count的返回值是Int,该类型与传入的函数参数类型没有直接关联,编译器无法通过返回值反向推导函数参数的类型;
  • 单独的_没有提供任何额外的类型线索,编译器无法确定它代表的是Boolean类型的参数。

而当你改成v.count(_ == true)时,函数体_ == true给了编译器明确的类型线索:只有Boolean类型的值才能和true进行相等比较,因此编译器可以立刻推断出占位符_的类型是Boolean,进而生成合法的Boolean => Boolean函数,代码也就可以正常编译了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:10:24