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

Scala函数报错修复:检测站点ID是否存在于目标站点序列

问题修复方案

错误原因分析

  1. Targeting类并非泛型类:你定义的case class Targeting(targetedSiteIds: Seq[String])没有类型参数,但函数filterSitesById中错误地将参数声明为Targeting[Seq[String]],这导致了Targeting does not take type parameters的报错。
  2. 函数逻辑错误:Targeting实例不是集合类型,不能直接调用fold方法;同时目标站点ID序列中的元素是字符串,不存在idx属性,直接用字符串比较即可。
  3. 代码顺序问题:在Scala中,必须先定义case class才能实例化它,原代码中实例化Targeting的代码在类定义之前,这也是潜在错误。
  4. 变量声明缺失:targeting = ...缺少val或var关键字,属于语法错误。

修复后的完整代码

val site_id = "0011a522ce0f4bbbbaa6b3c38cafaa0f"

// 先定义case class,再实例化
case class Targeting(targetedSiteIds: Seq[String])

// 正确声明变量并实例化Targeting
val targeting = Targeting(
  targetedSiteIds = Seq(
    "0009a522ce0f4bbbbaa6b3c38cafaa0f",
    "0010a522ce0f4bbbbaa6b3c38cafaa0f",
    "0011a522ce0f4bbbbaa6b3c38cafaa0f"
  )
)

// 修正函数参数类型与逻辑
def filterSitesById(sites: Targeting): Boolean = {
  sites.targetedSiteIds.contains(site_id)
}

// 调用函数获取结果
val trueOrFalse = filterSitesById(targeting) // 结果为true

关键修复点说明

  • 移除函数参数中的[Seq[String]],因为Targeting不是泛型类。
  • 直接访问Targeting实例的targetedSiteIds字段,使用contains方法判断站点ID是否存在,逻辑更简洁清晰。
  • 调整代码顺序,确保case class定义在实例化之前。
  • 为targeting变量添加val关键字,修正语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:13:19