gpt4 book ai didi

Scala:构造函数中具有默认参数值的通用数组

转载 作者:行者123 更新时间:2023-12-01 10:05:11 26 4
gpt4 key购买 nike

我有几个关于 scala 泛型和默认参数值的问题。

假设,我有以下类定义(其中 Stack[E] 是一个特征)

class ImmutableStack[E](capacity: Int = 10, elems: Array[E] = new Array[E](capacity))(implicit ev: ClassTag[E]) extends Stack[E]

当我尝试编译该代码时,出现了两个错误:

scala: cannot find class tag for element type E
class ImmutableStack[E <: Any](capacity: Int = 10, elems: Array[E] = new Array[E](capacity))(implicit ev: ClassTag[E]) extends SedgewickStack[E] {
^

和:

scala: not found: value capacity
class ImmutableStack[E <: Any](capacity: Int = 10, elems: Array[E] = new Array[E](capacity))(implicit ev: ClassTag[E]) extends SedgewickStack[E] {
^

谁能给我解释一下:

  1. 为什么 capacity 参数不能用于构造函数定义中的其他参数?
  2. 为什么 ClassTag ev 不适用于默认参数值,即 new Array[E](capacity)

当我删除 elem 参数的默认值时 - 一切正常。

提前感谢您的回答。

最佳答案

您只能将先前参数列表中的值用作构造函数和方法中的默认值,而不是来自同一个:

class ImmutableStack[E <: Any](capacity: Int = 10)(elems: Array[E] = new Array[E](capacity))(implicit ev: ClassTag[E])

要解决无法使用隐式类标签的问题,我能提供的最好方法是

class ImmutableStack[E <: Any : ClassTag](capacity: Int = 10)(elems: Array[E] = null) {
val realElems = if (elems != null) elems else new Array[E](capacity)
}

关于Scala:构造函数中具有默认参数值的通用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844101/

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