scala 解包一个值,并将其一部分用作给定的

bf1o4zei  于 6个月前  发布在  Scala
关注(0)|答案(2)|浏览(108)

我有这样的代码:

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)声明为给定的,而不是在下一行显式地创建对它的引用。
目前为止我找到的最好的

case S(str) =>
    given String = str


这样至少可以避免变量的第二个名字,但是如果能把所有的名字都写在一行中就更好了。
真实的代码使用更独特的类型,因此与使用非常常见的类(String)作为给定类相关的任何问题都是创建最小示例的工件

liwlm1x9

liwlm1x91#

你可以用<identifier> @ given <type>模式匹配givens,像这样:

value match {
  case S(str @ given String) => foo
}

字符串

uqzxnwby

uqzxnwby2#

另一个解决方案是:

value match {
  case S(str) => foo(using str)
}

字符串

相关问题