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

Scala模式匹配解包时如何直接声明given变量?

问题解答

先看你的代码场景:

def foo(using s: String) = ???

case class S(s: String)

val value = S("some string")
value match {
  case S(str) =>
    given s: String = str
    foo
}

你想知道能不能在模式匹配解包str时,直接把它声明为given,不用额外写一行赋值语句。

核心结论

截至Scala 3的当前版本,没有语法支持在case子句的模式里直接将解包变量声明为given实例。模式匹配的语法设计中,case后的模式部分只能用于绑定普通变量,无法直接创建given上下文实例。

现有最优写法

你找到的这种写法已经是最简洁的方案了:

case S(str) =>
  given String = str
  foo

它避免了重复命名变量,仅用一行完成given实例的声明,已经最大限度简化了代码。

补充说明

你提到实际代码用的是更独特的类型,不用担心String作为given带来的歧义问题,这点完全没问题——这种写法对于自定义类型同样适用,只要类型足够唯一,就不会出现上下文查找冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:43:09