gpt4 book ai didi

scala - 有没有办法从 Scala 中的 map 获取键/值类型?

转载 作者:行者123 更新时间:2023-12-01 10:35:22 25 4
gpt4 key购买 nike

在 C++ 中,我们可以从定义的映射中获取抽象键/值类型(key_typevalue_typehttp://en.cppreference.com/w/cpp/container/map)。当我以后需要更改 map 类型时,这非常方便,因为依赖类型会相应更改。

在 Scala 中,我也在寻找这样的功能。比如我定义了一个 map 类型:

type MapTy : mutable.Map[Long, Int]

并且我希望返回一个 map 条目(类型为Long->Int)。返回类型取决于MapTy,最好在函数签名中明确指定,写成类似MapTy::key_type->MapTy::value_type。因此,稍后我将 MapTy 更改为

type MapTy : mutable.Map[Int, Int]

条目类型也会同时更改为Int->Int

在 Scala 中可以吗?

最佳答案

在 Scala 中使用类型成员和类型细化完全可以做到这种事情:

scala> case class WrappedMap[K, V](underlying: Map[K, V]) { type E = (K, V) }
defined class WrappedMap

scala> type MapTy = WrappedMap[Long, Int]
defined type alias MapTy

scala> val entry: MapTy#E = 1L -> 0
entry: (Long, Int) = (1,0)

scala> val entry: MapTy#E = 1L -> "foo"
<console>:14: error: type mismatch;
found : String("foo")
required: Int
val entry: MapTy#E = 1L -> "foo"
^

或者:

def entries(m: MapTy): List[MapTy#E] = m.underlying.toList

val myEntries: List[MapTy#E] = entries(WrappedMap(Map(1L -> 0)))

大部分标准集合库不包含表示元素类型的类型成员,部分原因是一般地使用类型参数更适合惯用的 Scala 开发实践,但也有类型成员有用的情况,如果你真的想近似你在 C++ 中描述的内容,这可能是其中之一。

关于scala - 有没有办法从 Scala 中的 map 获取键/值类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com