获取scala map的键和值类型

bgtovc5b  于 7个月前  发布在  Scala
关注(0)|答案(1)|浏览(78)

如果我有一个复杂的Map类型,比如

type MyMap = Map[(String, String), List[Map[String, Int]]]

字符串
有没有办法做类似Map.Key的事情来获取密钥的类型(这里是(String, String))?
我希望标准的答案是要么声明作为键和值类型的类,要么使用

type MyMapKey = (String, String)
type MyMapValue = List[Map[String, Int]]
type MyMap = Map[MyMapKey, MyMapValue]


在本例中,我在许多地方使用了MyMap,但只在一个地方使用了键和值类型,这些类型为Map准备了数据。因此键和值类型感觉就像是实现细节,不需要与MyMap相同级别的名称。
这是其他语言中具有表达类型系统的常见特性,所以我希望在Scala中找到它,但它似乎并不存在。
我使用Scala 3,如果这很重要的话。

lnxxn5zx

lnxxn5zx1#

在Scala 3中,您可以使用匹配类型

type Key[M] = M match
  case Map[k, _] => k

字符串

type Key[M <: Map[?, ?]] = M match
  case Map[k, _] => k


测试:

implicitly[Key[MyMap] =:= (String, String)]


https://docs.scala-lang.org/scala3/reference/new-types/match-types.html

相关问题