如何访问列表中的对象-Scala

如何访问列表中的对象-Scala,scala,Scala,我的代码如下: class HuffmanNode(val chars: String, val occurrences: Int) { override def toString: String = "{" + chars + "|" + occurrences + "}" def absoluteValue: Int = occurrences def getChars: String = chars def getOccurrences: String = occur

我的代码如下:

class HuffmanNode(val chars: String, val occurrences: Int) {
  override def toString: String = "{" + chars + "|" + occurrences + "}"

  def absoluteValue: Int = occurrences

  def getChars: String = chars

  def getOccurrences: String = occurrences.toString
}

object HuffmanNode {
  def apply(chars: String, occurrences: Int): HuffmanNode = {
    new HuffmanNode(chars, occurrences)
  }
}
我正在尝试创建
HuffmanNode
的列表,例如:

val PQ: List[HuffmanNode] = List(HuffmanNode("a", 3), HuffmanNode("b", 3))
如何访问HuffmanNode中的方法

我试着这样做:

PQ(0).getChars
但是我得到一个错误,说,
无法解析符号getChars


可能是什么问题?

您的代码无法编译。如果我冒昧猜测一下,我会设想您使用的是单例列表而不是类的实例(单例没有getChars方法,只有apply)。

正如@Assaf Mendelson所指出的,您引用的是单例对象而不是类的实例

为了修复代码,您应该创建类的实例,如下所示:

  val PQ = List(HuffmanNode("blabla", 2))
  val chars = PQ(0).getChars // now compiles

如果您按照我在编辑中的建议更改代码,则调用
getChars
方法没有问题:

class HuffmanNode(val chars: String, val occurrences: Int) {
  override def toString: String = "{" + chars + "|" + occurrences + "}"

  def absoluteValue: Int = occurrences

  def getChars: String = chars

  def getOccurrences: String = occurrences.toString
}

object HuffmanNode {
  def apply(chars: String, occurrences: Int): HuffmanNode = {
    new HuffmanNode(chars, occurrences)
  }
}

val PQ: List[HuffmanNode] = List(HuffmanNode("a", 3), HuffmanNode("b", 3))

PQ(1).getChars
我得到:

PQ: List[HuffmanNode] = List({a|3}, {b|3})

res0: String = b

然而,我需要(只是为了测试)从
absoluteValue
方法中删除关键字覆盖。

对!我在做你刚才说的said@Vasu,如果答案有帮助,您应该将其标记为已接受。实际上,拥有一个带有应用程序的对象的全部意义不是使用new yourself,而是使用val PQ=List(HuffmanNode(“blablabla”,2))