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

为什么Scala中foldLeft无法访问自定义类的成员属性?

问题原因

你定义的Box属于Scala普通非样例类,构造参数默认不会生成为类的公开可访问成员:

  • 构造参数前不加val/var修饰时,参数仅在类内部可见,外部实例无法直接访问
  • 如果定义为样例类case class Box(...),Scala会默认给所有构造参数加val修饰,自动生成公开的getter方法,才可以直接用.size访问属性
修复方案

两种可选方案都可以解决报错:

方案1:给构造参数添加val修饰

修改类定义,显式声明参数为公开成员:

class Box(val color: String = "", val size: Int = 0)

方案2:直接定义为样例类

对于这种仅承载数据的类,样例类是更合适的选择,无需手动加val即可访问参数:

case class Box(color: String = "", size: Int = 0)

额外优化建议:你的现有foldLeft逻辑仅能过滤相邻的重复size元素,如果要实现全局按size去重,可以直接用Scala标准库提供的distinctBy方法,代码更简洁:

s.distinctBy(_.size)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:03