gpt4 book ai didi

scala - Scala 中的类型提取

转载 作者:行者123 更新时间:2023-12-04 19:19:17 26 4
gpt4 key购买 nike

我对 Scala 和高级编程语言很陌生。我尝试解决以下问题。

我有:

val s: Seq[SomeMutableType[_]]

我假设序列中的所有元素都属于同一类型(但此时不知道是哪一个)。

我怎么称呼:
def proc[T](v0: SomeMutableType[T], v1: SomeMutableType[T]) { /* ... */ }


proc(s(0), s(1))

编译器提示:

  • type mismatch; found : SomeMutableType[_$351] where type _$351 required: SomeMutableType[Any] Note: _$351 <: Any, but class SomeMutableType is invariant in type T. You may wish to define T as +T instead. (SLS 4.5)


我考虑过协变的事情,但我认为这对我来说没有意义。当我说 s(0) 和 s(1) 是同一类型时,我只是想让编译器相信我!我通常通过一些转换来做到这一点,但我不能在这里转换为 SomeMutableType[T],因为 T 由于删除而未知。当然,我不能改变 proc 的定义。

最佳答案

问题是你真的不能做出这样的保证。例如:

scala> import scala.collection.mutable.Buffer
import scala.collection.mutable.Buffer

scala> val s: Seq[Buffer[_]] = Seq(Buffer(1), Buffer("a"))
s: Seq[scala.collection.mutable.Buffer[_]] = List(ArrayBuffer(1), ArrayBuffer(a))

看?你不知道 s(0)s(1)属于同一类型,因为它们可能不是同一类型。

在这一点上,你应该问一个关于你想完成什么的问题,而不是问你想如何完成一个问题。你采取的方式是行不通的。退后一步,想想你试图用这种方法解决什么问题,然后问问如何解决这个问题。

例如,你说:

I assume that all elements in the sequence are of the same type (but do not know which one at this point).



可能你想做的是参数化一个类或方法,在声明 s时使用其类型参数.或者,也许没有 s根本。

关于scala - Scala 中的类型提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5941114/

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